私はDjango 1.9を使用しています。bulk_createを試して多数の新しいモデルオブジェクトを作成し、共通のmany_to_manyオブジェクトに関連付けます。Djangoはbulk_createを実行中にmany_to_manyオブジェクトを設定します
#Computational Job object
class OT_job(models.Model):
is_complete = models.BooleanField()
is_submitted = models.BooleanField()
user_email = models.EmailField()
#Many sequences
class Seq(models.Model):
sequence=models.CharField(max_length=100)
ot_job = models.ManyToManyField(OT_job)
私が提出された配列オブジェクトの数千を持っているとそれに関連付けられたジョブに関連する必要があるが、以下のように
私のモデルがあります。以前はイテレータを使っていましたが、それをforループに保存していました。しかし、読んだ後、Django 1.9はbulk_createを持っていることに気付きました。
現在、私は
DNASeqs_list = []
for a_seq in some_iterable_with_my_data:
# I create new model instances and add them to the list
DNASeqs_list.append(Seq(sequence=...,))
をやっている私は今、これらのシーケンスをbulk_createとcurrent_job_objectとそれらを関連付けます。
created_dnaseqs = Seq.objects.bulk_create(DNASeqs_list)
# How do I streamline this part below
for a_seq in created_dnaseqs:
# Had to call save here otherwise got an error
a_seq.save()
a_seq.ot_job.add(curr_job_obj)
私は
を言った「a_seq.ot_job.add(curr_job_obj)」をやっていた部分でエラーが発生しましたので、forループで「a_seq.saveを()」を呼び出す必要がありました。 ...この多対多の関係が使用される前に、フィールド "seq"の値を持つ必要があります。
other questions on this topicを読んでいるにもかかわらず、他の人と違って私はカスタム "スルー"モデルを持っていないので、私はまだ混乱しています。私は、OT_Jobをデータベースへのヒット数を最小限に抑えて、多くのSeqと関連付ける最良の方法と混同しています。ドキュメントhttps://docs.djangoproject.com/en/1.9/ref/models/querysets/#bulk-createから
ありがとうございます。私はドキュメントのその点を逃した。また、なぜbulk_createを使ったStackOverflowの他のいくつかの例がbulk_createの直後に検索を行う理由が分かりました。 – harijay