我有以下模型:
FileObject(models.Model):
region = models.ForeignKey()
include_in_lookup = models.BooleanField()
date = models.DateField()
...
我正在尝试修复一个应基于region
和date
来获取最新条目的查询。目标是为每个region
返回 latest (最近日期)条目(通过date
字段)
当我使用以下查询时,我可以实现这一目标:
from django.db.models import Max
obj.filter(
include_in_source_lookup=True
).values("region__name").annotate(Max("date")).order_by("region__name")
>>>
[{'region__name': 'Alabama', 'date__max': datetime.date(2018, 8, 23)},
{'region__name': 'Alaska', 'date__max': datetime.date(2018, 10, 20)},
{'region__name': 'Arizona', 'date__max': datetime.date(2018, 11, 4)},
...
奇怪的是,当我不包含order_by
时,它似乎不起作用,因为它返回了数据库中的 all 个条目。我知道这必须与如何将order_by与values
结合使用来实现,但是不确定如何精确地工作。
此外,如果我想传递值列表,考虑到order_by的工作方式,如何获得一致性?
例如:
GROUP_FIELDS = ['region', 'date']
obj.filter(
include_in_source_lookup=True
).values(*GROUP_FIELDS).annotate(Max("date")).order_by(*GROUP_FIELDS)
在尝试使用值列表时,我尝试了.annotate
,.values
和.order_by
的许多变体,但无法从第一个{{1 }},每个最新日期只有一个地区。
我需要在上面进行哪些更改,以便order_by仅返回包含最大日期的区域?预先感谢!