Django:根据外键字段值的最大值获取行
我有两种型号Django:根据外键字段值的最大值获取行,django,django-queryset,Django,Django Queryset,我有两种型号 class Status(models.Model) name = models.CharField(max_length=25) rank = models.PositiveSmallIntegerField() class MyModel(models.Model) user = models.ForeignKey(User) category = models.CharField(max_length=2) status = mode
class Status(models.Model)
name = models.CharField(max_length=25)
rank = models.PositiveSmallIntegerField()
class MyModel(models.Model)
user = models.ForeignKey(User)
category = models.CharField(max_length=2)
status = models.ForeignKey(Status)
entry_date = models.DateField()
--- Status table ---
id | name | rank
1 | poor | 1
2 | below avg| 2
3 | avg | 3
4 | above avg| 4
5 | good | 5
--- MyModel table ---
user | category | status_id | entry_date
user1 | A | 1 | ..
user1 | A | 2 | ..
user1 | A | 3 | ..
user1 | B | 2 | ..
对于给定的用户,我希望获得每个类别的最大排名状态。对于user1,我需要以下两行
user | category | status_id | entry_date
user1 | A | 3 | ..
user1 | B | 2 | ..
我怎样才能做到这一点?我尝试了MyModel.objects.annotation(max\u rank=max('status\u rank')).filter(status\u rank=F('max\u rank'))
但它在“having子句”中抛出了一个“未知列‘myapp_status.rank’。既然您想按用户和类别分组,我想您需要
MyModel.objects.values('user', 'category'
).annotate(max_rank=Max('status__rank'))
由于可能有多个条目具有最大秩,我认为您无法从这样的聚合查询中获得entry\u date
查看更多信息