Как отобразить категорию и подкатегорию в сериализаторе постов django-rest-framework

Мне нужно извлечь категории и подкатегории в сериализаторе Post, потому что мне нужно поставить пагинацию, если я поставлю пагинацию в представлении категорий, будет приходить разное количество постов, поэтому мне нужно поставить пагинацию в представлении Post, мне нужно вернуть ответ так, чтобы он выглядел так

и я хочу создать rest api для возврата вложенного json, как это

[
{
  "id": 1,
  "title": "Taomlar",
  "subcat": [
      {
        id: 2,
        title: "Milliy",
        post: [
            {
              id: 1,
              title: 'Palov',
              summa: 300000,
              ...
            },     
              {
              id: 2,
              title: 'Palov',
              summa: 300000,
              ...
            },
          ]
      },     
    ]  
}     
]

models.py

class Category(Base):
    title = models.CharField(max_length=200)
    parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')

    def __str__(self):
        return self.title

class Post(Base):
    title = models.CharField(max_length=225)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='post')

serializers.py

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = '__all__'

class PostSerializer(serializers.ModelSerializer):
    
    class Meta:
        model = Post
        fields = '__all__'

Может ли кто-нибудь дать мне решение для этой проблемы

вы можете прочитать больше о вложенном сериализаторе в Django Rest Framework

вы должны сделать это таким образом

class CategorySerializer(serializers.ModelSerializer):
      post_serializer = PostSerializer(many=True)
      class Meta:
          model = Category
          fields = ['your_field', 'post_serializer']

это базовый пример, попробуйте прочитать о нем больше, чтобы знать, как можно реализовать вложенные отношения

Насколько я понимаю, вам нужно получить каждую категорию с относящимися к ней постами.

Переписывать так:


class CategorySerializer(serializers.ModelSerializer):
    posts = serializers.SerializerMethodField()

    class Meta:
        model = Category
        fields = (
            'id',
            'title',
            'posts',
        )
    def get_posts(self, obj):
        serializer = PostSerializer(obj.products.all(), context=self.context, many = True)
        return serializer.data
Вернуться на верх