给定mod的Django GenericForeignKey查找

2024-09-29 19:35:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用一个投票应用程序(django ratings,如果这有什么区别的话),它使用django的GenericForeignKey,有一个ForeignKey给用户,还有几个其他字段,比如dateoflatestchange。在

我想得到一个内容类型的所有对象,一个用户投票支持的,按最新更改日期排序。据我所知-所有信息都可以在一个表中找到(除了可以预取/缓存的内容类型)。不幸的是,每次我请求content_对象时,django仍然会进行额外的查询。在

所以问题是-如何在给定的模型上,由一个给定的用户,使用相关的对象和给定的排序,以最小的数据库点击率获得所有的投票?在

编辑:现在我使用两个查询-首先选择所有的投票,得到所有我需要的对象,过滤依据.filter(pk_uuin=obj_ids),最后将它们填充到投票对象中。但似乎reverse generic relation可以帮助解决这个问题


Tags: 对象django用户信息应用程序类型内容排序
3条回答

the models.py of the django-ratings app开始,我认为您必须执行user.votes.filter(content_type__model=Model._meta.module_name).order_by("date_changed")(假设您要筛选的模型是Model)以获得所有的{}对象。对于相关的对象,循环查询每个项目的content_object。IMHO,这将导致最少的数据库查询。在

现在我们在genericorrelation上使用django 1.4中的prefetch_related()。它仍然使用2个查询,但有一个非常直观的界面。在

您是否已签出select_related()?这可能会有帮助。在

Returns a QuerySet that will automatically "follow" foreign-key relationships, selecting that additional related-object data when it executes its query. This is a performance booster which results in (sometimes much) larger queries but means later use of foreign-key relationships won't require database queries.

https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

相关问题 更多 >

    热门问题