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)