繁体   English   中英

Django queryset注释字段是列表/查询集

[英]Django queryset annotate field to be a list/queryset

我正在尝试使用django注释来创建queryset字段,该字段是一些相关模型属性的值列表。

queryset = ...
qs = queryset.annotate(
    list_field=SomeAggregateFunction(
        Case(When(related_model__field="abc"), then="related_model__id")
    ),
    list_elements=Count(F('list_field'))
)

我正在考虑将所有这些id与一些分隔符连接起来,但我不知道相应的函数。 另一种解决方案是让list_field一个queryset 我知道这种语法错了。 感谢您的任何帮助。

如果你使用postgresqldjango >= 1.9 ,你可以使用postgres特定的聚合函数,例如ArrayAgg

返回连接到数组中的值列表,包括空值。

如果您需要使用分隔符连接这些值,您也可以使用StringAgg

我做过类似的事情:

qs = queryset \
    .annotate(
        field_a=ArrayAgg(Case(When(
            related_model__field="A",
            then="related_model__pk")
        )),
        field_b=ArrayAgg(Case(When(
            related_model__field="B",
            then="related_model__pk")
        )),
        field_c=ArrayAgg(Case(When(
            related_model__field="C",
            then="related_model__pk")
        ))
    )

现在,对于queryset中的每个对象,每个field_afield_bfield_c下都有Nonepk列表。 您还可以为Case而不是None定义其他默认值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM