2013-08-25 57 views
0

我已经优化了以下最佳查询条件。GenericForeignKey上查询proformance Django

message = Message.objects.defer('gateway', 'batch', 'content_type', 'sender', 
              'reply_callback')\ 
       .select_related().get(pk=message_id) 

然而,该模型有一个名为billee场(见下文)

billee = generic.GenericForeignKey() 

我似乎不能够使用select_related或推迟对这一领域的,也许是因为它的一个GenericForeignKey。有人可以解释为什么,然后给我一个如何实现这个目标的例子吗?

+0

可能重复的[Django:select \ _related和GenericRelation](http://stackoverflow.com/questions/2939552/django-select-related-and-genericrelation) – HankMoody

回答

1

select_related()无法预取一般关系(它只能与ForeignKeyOneToOneField一起使用),所以如果您真的想减少这一个附加查询,您可能需要编写原始SQL查询。

在一次获取多条消息的情况下您可以使用prefetch_related(),它可以遵循一般关系(但仍会进行额外的查询)。