我使用一个投票应用程序(django ratings,如果这有什么区别的话),它使用django的GenericForeignKey,有一个ForeignKey给用户,还有几个其他字段,比如dateoflatestchange。在
我想得到一个内容类型的所有对象,一个用户投票支持的,按最新更改日期排序。据我所知-所有信息都可以在一个表中找到(除了可以预取/缓存的内容类型)。不幸的是,每次我请求content_对象时,django仍然会进行额外的查询。在
所以问题是-如何在给定的模型上,由一个给定的用户,使用相关的对象和给定的排序,以最小的数据库点击率获得所有的投票?在
编辑:现在我使用两个查询-首先选择所有的投票,得到所有我需要的对象,过滤依据.filter(pk_uuin=obj_ids),最后将它们填充到投票对象中。但似乎reverse generic relation可以帮助解决这个问题
从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()
?这可能会有帮助。在https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related
相关问题 更多 >
编程相关推荐