Django ORM:如何在汇总结果上应用函数?

时间:2020-10-28 14:41:19

标签: django django-orm

我想做

SELECT [field1], ST_Area(ST_Union(geometry), True) FROM table [group by field1]

或者,换句话说,如何在汇总结果上应用函数? ST_Union是一个聚合。 [field1]只是一种自由的说法,我想在有或没有此group by的情况下运行两个查询。

此外,带有2个参数的ST_Area似乎在dgigo gis帮助器上不可用,因此必须使用Func编写。

此外,我希望也可以按所有内容进行汇总(不提供groupBy),但是如果我不向查询集提供任何group by id,django似乎会添加.values()

这似乎很令人困惑。我无法理解注释和聚合。谢谢!

1 个答案:

答案 0 :(得分:0)

显然,我通常可以像这样

from django.contrib.gis.db.models import Union, GeometryField
from django.contrib.gis.db.models.functions import Transform, Area

qs = qs.annotate(area_total=Area(Transform(Union("geometry"), 98056)))

我遇到的问题是我试图使用Func() expressions。为了在Func的第一个参数中链接另一个函数,必须用ExpressionWrapper或其他东西包装它。

    qs = qs.annotate(
        area_total=Func(
            ExpressionWrapper(Union("geometry"), output_field=GeometryField()),
            True,
            function="ST_Area",
            output_field=FloatField(),
        )
    )