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