【发布时间】:2018-10-08 09:38:36
【问题描述】:
class Order(models.Model):
# ..fields
user = models.ForeignKey(User, on_delete=models.CASCADE)
date_added = models.DateTimeField(auto_now_add=True)
我想获取所有用户,并为每个用户添加其最新订单 - 例如 date_added 最大的用户的Order。我想在 单个查询 中执行此操作(在 SQL 中,这将通过一个查询完成)。
这是我尝试过的:
users = User.objects.all().annotate(last_order=Max('order__date_added'))
但这只会给我最后一个订单的日期,我想要 Order 对象本身。
【问题讨论】:
-
User.objects.annotate(last_order=Max('order__date_added')).values('order__user', 'last_order').order_by('order__user')您需要将 order by 添加到 group by user -
我必须使用 .values() 吗?我仍然需要一个查询集实例
-
如果您不需要通过注释进行过滤,简单的解决方案是将属性(方法)添加到您的模型用户。
-
这将需要多个查询,我认为不可能通过类属性进行过滤
标签: python django django-queryset django-orm