我正在使用Django 1.9并尝试使用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)
我有数千个提交的Seq对象,必须与其关联的作业相关联。以前我使用的是迭代器并将它们保存在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=..., ))
我现在想要批量创建这些序列并将它们与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)
我不得不打电话给#34; a_seq.save()" for for循环,因为我在我正在做的部分出现错误" a_seq.ot_job.add(curr_job_obj)"其中说
....需要为字段" seq"在此之前可以使用多对多关系。
尽管阅读other questions on this topic,我仍然感到困惑,因为与其他人不同,我没有定制"通过"模型。我很困惑如何最好地将OT_Job与许多Seqs关联起来,对数据库的命中率最低。
答案 0 :(得分:1)
来自文档https://docs.djangoproject.com/en/1.9/ref/models/querysets/#bulk-create:
如果模型的主键是AutoField,它不会像save()那样检索和设置主键属性。
它不适用于多对多关系。
bulk_create
字面上只会创建对象,它不会像save
那样将PK检索到变量中。您必须重新查询数据库以获取新创建的对象,然后创建M2M关系,但听起来不合适,并且您当前的方法是当前最佳解决方案。