如何使用两个列表在Django Model查询中插入多个记录

时间:2013-10-25 13:20:03

标签: python django list django-models django-orm

我有三张桌子:

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()

1 个答案:

答案 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模型的单独实例更有效。