Как задать имя поля в агрегате django?
Например,
Мои программы:
[{"name": "html"}, {"name": "css"}, {"name": "css"}, {"name": "css"}]
в базе данных.
models.py
class Program:
name = models.CharField(max_length=50)
views.py
class ProgramCountView(APIView):
def get(self, request):
query_list = []
programs = Program.objects.distinct().values_list("name", flat=True)
for program in programs:
query_list.append(Count("name", filter(Q(name=program)))
result = Program.objects.aggregate(*query_list)
return Response(result)
Но ошибка была: Сложные агрегаты требуют псевдонима.
Я хочу получить результат типа {"html": 1, "css": 3}
Используйте словарь для хранения ваших подсчетов и распаковывайте их как аргументы ключевых слов при передаче в aggregate()
class ProgramCountView(APIView):
def get(self, request):
queries = {}
programs = Program.objects.distinct().values_list("name", flat=True)
for program in programs:
queries[program] = Count("name", filter=Q(name=program))
result = Program.objects.aggregate(**queries)
return Response(result)