我有两个型号
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.annotate(max_rank=Max('status__rank')).filter(status__rank=F('max_rank'))
但它会在'having clause'中抛出“未知列'myapp_status.rank'。”
答案 0 :(得分:1)
因为你想按用户和类别分组,我认为你需要像
这样的东西 MyModel.objects.values('user', 'category'
).annotate(max_rank=Max('status__rank'))
因为可能有几个条目具有最高排名,我认为你不能从像这样的聚合查询中获得entry_date
有关详情,请参阅the docs