我有三张桌子:
table1,table2,table3
从table1我得到数据:
table1queryset = table1.objects.filter(token = 123)
它给了我50条记录。
从table2我得到数据:
table2queryset = table2.objects.filter(name='andy')
它给了我10条记录。
table3结构如下:
mytoken = models.foreignKey(table1)
myname = models.foreignKey(table2)
现在为每个table1记录我想将table2记录插入table3。像:
for eachT1 in table1queryset:
for eachT2 in table2queryset:
table3(mytoken=eachT1,myname=eachT2).save()
在我的情况下,它将插入50 * 10 = 500条记录。
使用它的最有效方法是什么? 我可以将查询集分配给查询,例如:
table3(mytoken=table1queryset,myname=table2queryset).save()
答案 0 :(得分:0)
查看RelatedManager.add承诺“使用具有多对多关系的add()”不会调用任何save()方法,而是使用QuerySet.bulk_create()创建关系。“
如果你在第一个模型中定义ManyToMany字段并告诉django这个关系必须通过表3(如ManyToManyField.through),你可以这样做:
t2s = [x.id for x in tq2]
for t1 in tq1:
tq.add(*t2s)
并且可能比创建T3模型的单独实例更有效。