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")
))
)
これで、クエリセット内のすべてのオブジェクトの各field_a
、field_b
、およびfield_c
の下にNone
またはpk
のリストがあります。 Case
の代わりにNone
の他のデフォルト値を定義することもできます。