0

私は3つのテーブルを持っています:

テーブル 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 フィールドを定義し、この関係がテーブル 3 ( ManyToManyField.throughなど) を介して機能する必要があることを django に伝えると、次のことができます。

t2s = [x.id for x in tq2]

for t1 in tq1:
    tq.add(*t2s)

そしておそらく、T3 モデルの個別のインスタンスを作成するよりも効率的です。

于 2013-10-25T13:35:05.750 に答える