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不要被推迟,但它是!并且列表理解需要很长时间,因为每次迭代都会命中两次数据库。

我也在查询集中尝试过foreign_key1__id,但没有帮助。如何在使用时不延迟外键only()

4

2 回答 2

2

原来问题根本不在only()。据我所知only(),即使您给它外键字段,它也不会获取相关模型。要获取您需要的相关模型select_related()。此外,请注意,如果null=TrueForeignKey,您还需要提供select_related()特定的外键字段,如下所示:

.select_related('foreign_key1')

在我的情况下,以下内容也足够了:

.select_related('foreign_key1__id')
于 2011-11-12T15:30:03.873 回答
0

尝试这个:

o1.foreign_key1_id==o2.foreign_key1_id

它应该有帮助。

only('xxxx_id') 没有意义。

于 2016-11-04T03:02:02.267 回答