Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:根据外键字段值的最大值获取行_Django_Django Queryset - Fatal编程技术网

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

查看更多信息