使用最大值过滤数据

Filter data using max value

我有一个由订单字段组成的模型,我想获取具有 order.

最大值的行
Class MyModel(models.Model):
   user = models.ForeignKey(User)
   order = models.IntegerField()

现在假设我想为用户 1 获取记录,对于这个用户,table 中存在的总行数是 10,但我只想要具有最大订单价值的那一行。

此外,如果我想为两个用户获取记录,则必须应用相同的条件。对于此过滤器查询,每个用户必须 return 一行,最大值为 order col.

没错,我正在使用注释,但它 return 所有行

rows = MyModel.objects.annotate(max_seq=Max('order')).filter(user = 1)

所以当我遍历这一行时它会打印所有 10 行,但它必须 return 只有一行具有 col max order value

尝试使用 order_by 并只取第一个返回的元素:

rows = MyModel.objects.filter(user = 1).order_by("orders")[0]

根据评论,此解决方案无法为所有用户获取最大值。我会反过来做,从用户模型开始:

users = User.objects.annotate(Max("mymodel__order"))
print users[0].mymodel__order__max

另见 this part of the django doc

您可以将用户(您想要过滤记录的用户)放入列表中,然后遍历它们并根据 stellasia 的建议触发查询..

users = [1,2,3]

for user in users:
   row = MyModel.objects.filter(user__id = user).order_by("order")[0]

即使用户列表中只有一个用户,这里也会给出您想要的结果..

我只使用 Django ORM 解决了你的问题。

示例数据:

MyModel.objects.values('user__id', 'order')
[{'user__id': 1, 'order': 1}, {'user__id': 1, 'order': 2}, {'user__id': 2, 'order': 1}, {'user__id': 2, 'order': 2}, {'user__id': 2, 'order': 3}]

和查询:

MyModel.objects.values("user").annotate(ordermax=Max("order")).order_by()
[{'ordermax': 2, 'user': 1}, {'ordermax': 3, 'user': 2}]

Django 文档参考:Interaction with default ordering or order_by()