Группировка наборов запросов по полям

Я работаю с 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.

Да, вам необходимо внести некоторые изменения в ваш код.

  1. Получите все категории, используя values_list('category', flat=True) с вашим набором запросов
  2. Пройдитесь по ним, фильтруя категории по одной

    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)

Вернуться на верх