Django aggregate объединяет два выражения в одно dict в качестве выходного поля

У меня есть код, который агрегирует queryset и подсчитывает количество объектов с условием:

        queryset = queryset.aggregate(
            first_win=Count(
                "score",
                filter=Q(score__first_score=5),
                output_field=FloatField(),
            ),
            second_win=Count(
                "score",
                filter=Q(score__second_score=5),
                output_field=FloatField(),
            ),
        )

А это формат ответа:

{
    "first_win": 78.26086956521739,
    "second_win": 17.391304347826086
}

Я хочу изменить его и объединить два или более значений в одно. Могу ли я как-то сделать так, чтобы это выглядело следующим образом?

{
    "win_info": {
        "first_win": ...
        "second_win": ...
    }

}

Это позволит вам делать аннотации.

from django.db.models import Value, CharField
from django.db.models.functions import Concat

import json

queryset = queryset.annotate(
    first_win=Count(
        "score",
        filter=Q(score__first_score=5),
        output_field=FloatField(),
    ),
    second_win=Count(
        "score",
        filter=Q(score__second_score=5),
        output_field=FloatField(),
    ),
).aggregate(
    win_info=Concat('{"first_win": ', Value("first_win"), ', "second_win": ', Value("second_win"), '}',
    output_field=CharField()
)

data = list(map(lambda x: json.loads(x), queryset)))
Вернуться на верх