Django queryset如何使用annotate()检索相关字段

Django queryset如何使用annotate()检索相关字段,django,django-models,Django,Django Models,我有这张桌子: id supply event_date value_average ---------------------------------------- 1 a 01-01-2018 5 2 b 02-01-2018 6 3 a 02-01-2018 7 4 b 03-01-2018 8 5 c 03-01-2018

我有这张桌子:

id  supply   event_date   value_average
----------------------------------------
1     a      01-01-2018        5
2     b      02-01-2018        6
3     a      02-01-2018        7
4     b      03-01-2018        8
5     c      03-01-2018        9
我试图根据事件日期列获取每个供应的最新值。我可以得到最新的事件,但我也没有找到返回平均值的方法

values_average = Purchase.objects \
    .values('supply') \
    .annotate(last=Max('event_date')) \
    .order_by()
当前回报:

a        02-01-2018
b        03-01-2018
c        03-01-2018
预期回报:

a        02-01-2018      7
b        03-01-2018      8
c        03-01-2018      9

我认为您只需将value_average属性添加到您想要返回的值:

values_average= Purchase.objects.values('supply','value_average').annotate(last=Max('event_date'))

我找到了一种方法,通过以下回答:

它只适用于博士后。最终结果将是包含最新事件的正常查询集。如果您的模型有元排序,请小心

Django在这方面的文件:

如果我添加value\u average,结果查询也将按value\u average分组,并给出错误的结果。有价值平均值:…按“事件”分组。“供应id”,“事件事件”,“价值平均值”无价值平均值:…按“事件”分组。“供应id”我不确定我是否理解您,但您是否尝试按供应分组?比如:values\u average=Purchase.objects.values('supply','value\u average')。annotate(last=Max('event\u date'))。groupby('suply')。据我所知,.groupby()在ORM中不存在。要按某个对象分组,我们必须使用values()。如果我遗漏了什么,你能给我指一下相关的文件吗?
values_average = Purchase.objects \
            .filter(farm=farm, supply__in=queryset) \
            .order_by('supply', '-event_date') \
            .distinct('supply')