[英]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
。 我知道这种语法错了。 感谢您的任何帮助。
我做过类似的事情:
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_a
, field_b
和field_c
下都有None
或pk
列表。 您还可以为Case
而不是None
定义其他默认值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.