Django - 查询ArrayField中的最新日期

时间:2017-07-18 22:22:34

标签: django postgresql django-queryset

我正在使用Django的postgres ArrayField

说我有这样的模型:

from django.db import models
from django.contrib.postgres.fields import ArrayField

class Event(models.Model):
    name = models.CharField(max_length=200)
    dates = ArrayField(models.DateField())

我希望找到最新日期的Event。有没有办法构建一个可以做到这一点的查询集?

1 个答案:

答案 0 :(得分:1)

我无法深入了解Django的细节(我对它并不那么精通)。但是,一些指示:

  1. 直接使用SQL语言,您可以使用:

    SELECT
        name, (SELECT max(d) FROM unnest(dates) d) AS latest_date
    FROM
        Event ;
    
  2. 要将反转换这个到Django,请检查Django Postgresql ArrayField aggregation,并根据您的具体情况进行调整。

    我认为以下代码中的某些内容应该可以解决 1

    Event.objects.annotate(arr_els=Func(F('dates'), function='unnest')) \
            .values_list('arr_els', flat=True).aggregate(Max('arr_els'))
    
  3. 请参阅 dbfiddle here 中的SQL示例。

    1)我没有合适的环境来测试Django部分...所以,这是未经测试的。