Группировка наборов запросов по полям
Я работаю с Django и Django REST framework. У меня есть модель Selection
, которая содержит поле category
, когда я запрашиваю модель, чтобы отправить результат на фронтенд, я получаю его со следующей структурой:
[
{
"id": 1,
"category": "SHOES",
"products": 122,
"created_at": "2021-09-11",
},
{
"id": 2,
"category": "SHOES",
"products": 4,
"created_at": "2021-10-07",
},
{
"id": 3,
"category": "CLOTHES",
"products": 0,
"created_at": "2021-10-08",
},
]
Мне нужно поместить выборки одной категории в массив и удалить категорию grouped-by, вот так:
{
"SHOES": [
{
"id": 1,
"products": 122,
"created_at": "2021-09-11",
},
{
"id": 2,
"products": 4,
"created_at": "2021-10-07",
}
],
"CLOTHES": [
{
"id": 3,
"category": "CLOTHES",
"products": 0,
"created_at": "2021-10-08",
}
]
}
Я думал сделать это с помощью Javascript
во фронтенде, но прежде я хотел узнать, есть ли способ сделать это из Django.
Да, вам необходимо внести некоторые изменения в ваш код.
- Получите все категории, используя values_list('category', flat=True) с вашим набором запросов
- Пройдитесь по ним, фильтруя категории по одной
response_list = []
categories = Selection.objects.values_list('category', flat=True)
for category in categories:
data = Selection.objects.filter(category=category)
data = {
category: SelectionSerializer(data, many=True),
}
response_list.append(data)