我正在使用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
。有没有办法构建一个可以做到这一点的查询集?
答案 0 :(得分:1)
我无法深入了解Django的细节(我对它并不那么精通)。但是,一些指示:
直接使用SQL语言,您可以使用:
SELECT
name, (SELECT max(d) FROM unnest(dates) d) AS latest_date
FROM
Event ;
要将反转换这个到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'))
请参阅 dbfiddle here 中的SQL示例。
1)我没有合适的环境来测试Django部分...所以,这是未经测试的。