0

我有三张桌子:

表 1、表 2、表 3

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

1 回答 1

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

于 2013-10-25T13:35:05.750 回答