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')