Django rest framework вложенные категории

для категоризации товаров написаны вложенные категории. Когда мы работали с самим Django, для отображения вложенных категорий в разделе navbar, мы использовали отображение и главной, и вложенных категорий с помощью четырех циклов дважды

Мой вопрос заключается в том, что теперь, когда я хочу написать код в django rest framework для отображения вложенных категорий, в дополнение к коду ниже, нужно ли мне сделать что-нибудь еще?

На самом деле, меня беспокоит вопрос о том, как вложенная категория вызывается и отображается внешним программистом?

my model :
class Category(models.Model):
    name = models.CharField(max_length=200, null=True, blank=True)
    sub_category = models.ForeignKey('self', on_delete=models.CASCADE, related_name='sub')
    sub_cat = models.BooleanField(default=False)
    slug = models.SlugField(allow_unicode=True, unique=True, null=True, blank=True)


class Product(models.Model):
    name = models.CharField(max_length=200, null=True, blank=True)
    category = models.ManyToManyField(Category, blank=True, related_name='cat_product')
    unit_price = models.IntegerField()

my url :

path('category/', views.CategoryListApi.as_view()),
path('category/<slug:slug>/', views.CategoryProductsApi.as_view()),

    my view:
    
   class CategoryListApi(generics.ListAPIView):
    queryset = Category.objects.all()
    serializer_class = CategorySerializer


class CategoryProductsApi(generics.ListAPIView):
    serializer_class = ProductSerializer

    def get_queryset(self):
        products = Product.objects.filter(category__slug=self.kwargs['slug'])
        return products

     my serializer:
    
    class ProductSerializer(serializers.ModelSerializer):    
        category = serializers.SerializerMethodField()
    
        class Meta:
            model = Product
            fields = '__all__'
    
        def get_category(self, obj):
            return [cat.name for cat in obj.category.all()]
    
    
    class CategorySerializer(serializers.ModelSerializer):
        sub_category = serializers.SlugRelatedField(read_only=True, slug_field='name')
    
        class Meta:
            model = Category
            fields = '__all__'
Вернуться на верх