0

我已经尽我所能优化了下面的查询。

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

但是,该模型有一个名为billee(见下文)的字段

billee = generic.GenericForeignKey()

我似乎无法在此字段上使用 select_related 或 defer,可能是因为它是 GenericForeignKey。有人可以解释为什么,然后给我一个如何实现这一目标的例子吗?

4

1 回答 1

1

select_related()不能预取通用关系(它只适用于ForeignKeyand OneToOneField),所以如果你真的想减少这个额外的查询,你可能需要编写一个原始的 SQL 查询。

如果一次获取多条消息,您可以使用prefetch_related()which 可以遵循通用关系(但仍会进行附加查询)。

于 2013-08-25T22:15:05.720 回答