Django.fun

Group queryset by field

I am working with Django and Django REST framework. I have a model called Selection that contains field called category, when i query the model to send the result to the frontend i get it with the following structure:

[
  {
    "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",
  },
]

I need to put the selections of the same category in an array and remove the grouped-by category, like this:

{
   "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",
     }
   ]
}

I considered to making it with Javascript in the frontend, but before i wanted to know if there's a way to do this from Django.

Yes, you need to do some customisation in your code.

  1. Get all categories by using values_list('category', flat=True) with your queryset
  2. Iterate through them filtering category one by one

    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)

Tutorials

Константы Python: Улучшение управляемости вашего кода

Современный Python: начинаем проект с pyenv и poetry

Настройка проекта Python — виртуальные среды и управление пакетами

Использование requests в Python — тайм-ауты, повторы, хуки

Понимание декораторов в Python

ProcessPoolExecutor в Python: полное руководство

map() против submit() с ProcessPoolExecutor в Python

Понимание атрибутов, словарей и слотов в Python

Полное руководство по slice в Python

Выпуск Django 4.0

Безопасное развертывание приложения Django с помощью Gunicorn, Nginx и HTTPS

Автоматический повтор невыполненных задач Celery

Django REST Framework и Elasticsearch

Докеризация Django с помощью Postgres, Gunicorn и Nginx

Асинхронные задачи с Django и Celery

Релизы безопасности Django: 3.2.4, 3.1.12 и 2.2.24

Выпуски исправлений ошибок Django: 3.2.3, 3.1.11 и 2.2.23

Эффективное использование сериализаторов Django REST Framework

Выпуски безопасности Django: 3.2.2, 3.1.10 и 2.2.22

Выпущенные релизы безопасности Django: 3.2.1, 3.1.9 и 2.2.21

View all tutorials →