我的模型由订单字段组成,我想获取具有order
最大值的那一行。
Class MyModel(models.Model):
user = models.ForeignKey(User)
order = models.IntegerField()
现在假设我要为用户1获取记录,对于此用户,表中存在的行总数为10
,但我只想要具有最大订单值的行。
此外,如果我想为两个用户提取记录,则必须应用相同的条件。对于此过滤器,查询必须为每个具有order
col。
对,我正在使用注释,但它返回所有行
rows = MyModel.objects.annotate(max_seq=Max('order')).filter(user = 1)
所以当我遍历这些行时,它会打印所有10行,但它必须只返回一行col col order order
答案 0 :(得分:2)
您可以将用户(您希望过滤其中的记录)放入列表中,然后通过它们进行迭代并触发查询stellasia建议的内容。
hypot
即使用户列表中只有一个用户,它也会提供您想要的结果。
答案 1 :(得分:1)
尝试使用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
答案 2 :(得分: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 doc参考:Interaction with default ordering or order_by()