Django通过多个字段注释和排序

时间:2018-11-30 18:41:22

标签: django

我有以下模型:

FileObject(models.Model):

    region = models.ForeignKey()
    include_in_lookup = models.BooleanField()
    date = models.DateField()
    ...

我正在尝试修复一个应基于regiondate来获取最新条目的查询。目标是为每个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仅返回包含最大日期的区域?预先感谢!

0 个答案:

没有答案