【发布时间】:2011-02-04 09:29:29
【问题描述】:
我很惊讶这个问题没有出现。在网上找不到太多内容。
使用Entry.objects.latest('created_at')我可以恢复所有Entry对象的最新条目,但是如果我想要每个用户的最新条目?这类似于 SQL 最新记录查询。但是我如何使用 ORM 来实现这一点?这是我的方法,我想知道它是否是做我想做的最有效的方法。
首先我执行一个子查询:对象按用户分组,并为每个用户返回 Max(最新)created_by 字段(created_at__max)然后我根据子查询中的结果过滤 Entry 对象并获取所需的对象。
Entry.objects.filter(created_at__in=Entry.objects.values('user').annotate(Max('created_at')).values_list('created_at__max'))
或使用经理:
class UsersLatest(models.Manager):
def get_query_set(self):
return super(UsersLatest,self).get_query_set().filter(created_at__in=self.model.objects.values('user').annotate(Max('created_at')).values_list('created_at__max'))
有没有更有效的方法?可能没有子查询?
谢谢,
保罗
【问题讨论】:
-
我想在我的模型中添加一个 is_latest 布尔值,当我在 form.save 方法中保存一个新条目时设置它,然后我恢复以前的 is_latest 对象并将其设为 false ---所以每个条目保存有两个步骤。我不知道这是否是最好的方法。有什么建议吗?
标签: django