Django queryset annotate field to be a list/queryset

后端 未结 2 1896
逝去的感伤
逝去的感伤 2020-12-29 12:06

I\'m trying to use django annotation to create queryset field which is a list of values of some related model attribute.

queryset = ...
qs = queryset.annotat         


        
2条回答
  •  南方客
    南方客 (楼主)
    2020-12-29 12:35

    I have done something like that:

    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")
            ))
        )
    

    Now there are lists of None or pk under each field_a, field_b and field_c for every object in queryset. You can also define other default value for Case instead of None.

提交回复
热议问题