0

次の点を考慮してください。

objs1 = MyModel.objects.filter(field1='1').only('foreign_key1','field2')
objs2 = MyModel.objects.filter(field1='2').only('foreign_key1','field2')

for o1 in objs1:
    matches = [o2 for o2 in objs2 if o1.foreign_key1==o2.foreign_key1]
    print len(matches)

only()他のすべてのフィールドを延期します。しかし、AFAICT、私はforeign_key1延期しないように要求しましたが、そうです! また、反復ごとに db が 2 回ヒットするため、リストの理解には非常に長い時間がかかります。

クエリセットも試しforeign_key1__idましたが、役に立ちませんでした。まだ使用している間に外部キーを延期しないようにするにはどうすればよいonly()ですか?

4

2 に答える 2

2

問題はまったくなかったことが判明しましたonly()。私が知る限りonly()、外部キー フィールドを指定しても、関連するモデルは取得されません。関連するモデルを取得するには、 が必要select_related()です。null=Trueさらに、 の場合は、次のような特定の外部キー フィールドも指定ForeignKeyする必要があることに注意してください。select_related()

.select_related('foreign_key1')

私の場合は、以下でも十分です。

.select_related('foreign_key1__id')
于 2011-11-12T15:30:03.873 に答える