【发布时间】:2017-01-30 00:54:03
【问题描述】:
我使用 django 1.10.1、postgres 9.5 和 redis。 我有一个存储用户投票的表格,看起来像:
==========================
object | user | created_on
==========================
其中object 和user 分别是它们自己表的id 列的外键。
问题在于,在很多情况下,我必须在一页中列出许多对象。如果用户已登录或通过身份验证,我必须检查每个对象是否被投票(并根据结果采取行动,例如显示vote 或unvote 按钮)。所以在我的模板中,我必须为页面中的每个对象调用这样的函数。
def is_obj_voted(obj_id, usr_id):
return ObjVotes.objects.filter(object_id=obj_id, user_id=usr_id).exists()
由于我在一页中可能有数十个对象,我发现,使用django-debug-toolbar,单独访问数据库可能需要一秒钟以上,因为我每次查询只访问一行,并且以串行方式发生页面中的所有对象。更糟糕的是,我在其他页面中使用来自该表的类似查询(即仅使用 user 或 object 进行过滤)。
我试图实现并且我认为正确的做法是找到一种方法来访问数据库一次以获取由某个用户投票过滤的所有对象(可能是当用户登录或在需要此类数据库访问的第一页命中),然后根据页面需要将其进一步过滤到我想要的任何内容。由于我使用redis和django-cacheops app,它可以帮助我完成这项工作吗?
【问题讨论】:
-
你是如何得到你的 object_ids 请用那部分代码更新。 redis 和 django-cache 在哪里出现?
标签: django postgresql redis django-cache