Django drf Serialize group by model field

Django drf Serialize group by model field У меня есть конечная точка drf, я получаю этот результат, но я хочу сгруппировать этот результат по полю модели product_type, как я могу это реализовать? Я пробовал как в этом ответе DRF: Serializer Group By Model Field. но это мне не помогло

как я могу группировать по типу товара в таком виде

мой код

.models.py

class Product(models.Model):

    PRODUCT_TYPE_CHOICES = [
        ('Snacks', 'Snacks'),
        ('Beverages', 'Beverages'),
        ('Cocktails', 'Cocktails'),
        ('Cofe', 'Cofe'),
        ('Desserts', 'Desserts'),
        ('Sauces', 'Sauces'),
    ]


    name = models.CharField(max_length=50)
    product_type = models.CharField(max_length=50, choices=PRODUCT_TYPE_CHOICES)
    img_url = models.URLField()
    grams = models.PositiveSmallIntegerField(blank=True, null=True)
    description = models.TextField(max_length=500, blank=True)
    extra_ingredients = models.ManyToManyField(Extra_Ingredients, blank=True)
    extra_info = models.CharField(max_length=50, blank=True)
    price = models.DecimalField(max_digits=5, decimal_places=2)

    def __str__(self) -> str:
        return f'{self.product_type}'

.serialers.py

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = '__all__'


.view.py

class ProductGroupApiView(generics.ListAPIView):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer

Я понял ваше намерение классифицировать и возвращать данные через значение ключа product_type.

Добавлен процесс классификации возвращаемых значений в ProductGroupApiView. Возвращается значение, классифицированное как product_type.

views.py

from rest_framework import generics, status
from rest_framework.response import Response
from .models import Product
from .serializers import ProductSerializer

# Create your views here.

class ProductGroupApiView(generics.ListAPIView):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer
    
    def get(self, request, *args, **kwargs):
      response = super().get(request, *args, **kwargs)
      group = {product["product_type"]: [] for product in response.data}
      {group[product["product_type"]].append(product) for product in response.data}

      return Response(group, status=status.HTTP_200_OK)    

enter image description here

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