我有一个这样的模型:
Class Foo(model.Models):
date = models.DateField()
price = models.FloatField()
volume = models.IntegerField()
我想获得每天价格最高的所有物品的清单!像这样的东西:
{
2017-01-01: {"date": 2017-01-01, "price": 1000, "volume": 210},
2017-01-02: {"date": 2017-01-02, "price": 1032, "volumne": 242},
.
.
.
}
我可以使用一个查询执行此操作吗?数据库相对较大,并且在日期上执行循环不起作用。
答案 0 :(得分:2)
您可以执行以下操作以获取特定日期的最高价格
from django.db.models import Max
Foo.objects.values('date').annotate(max_price=Max('price'))
编辑:如果您想获得具有特定日期最高价格的整个对象,您可以通过OuterRef
和Subquery
实现这一目标,Django 1.11支持
from django.db.models import Max, Subquery, OuterRef
subquery = Foo.objects.filter(date=OuterRef('date')).order_by('-price')
queryset = Foo.objects.filter(price=Subquery(subquery.values('price')[:1]))
这将创建一个子查询,以获取具有给定日期的最大价格值的对象,然后通过此子查询过滤主查询集。您可以在Django docs了解有关子查询的更多信息。