Django Rest Framework: Вывод товара из категории и подкатегории

Cтолкнулся с проблемой с реализаций вывода товара по категориям и подкатегориям.

У каждого товара (модель Product) есть подкатегория, относящаяся только к одной категории. Нужно сделать так, чтобы при условном нажатии отправлялся GET-запрос, а сервер присылал json с товарами которые относится к подкатегории или к категории в зависимости от того, какой API используем, то есть на frontend условно должно выглядеть так :

  • Нажимаем на категорию : Выводится весь список товаров который относится к этой категории и его подкатегории
  • Нажимаем на подкатегорию : Выводится список товаром которые относится только к подкатегории

Сейчас структура выглядит так :

Пример

Я пробовал отфильтровать через queryset, но я не понимаю как составить API-запрос. Пробовал через django_filtres (фильтрация через URL, по-моему ), но они все мне просто выводили полный список товаров, даже укороченный, без id категории. Вот список, который я получаю по запросу api/vds/product:

введите сюда описание изображения

models.py


class Product(models.Model):
    name = models.CharField(max_length=50, verbose_name='Название')
    description = models.CharField(verbose_name='Описание', max_length=1000)
    category = models.ForeignKey('Category', on_delete=models.CASCADE, verbose_name='категория')
    maker = models.ForeignKey(
        'Maker',
        on_delete=models.CASCADE,
        related_name="products",
        blank=True,
        null=True,
    )


    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Товар'
        verbose_name_plural = 'Товары'


class Category(models.Model):
    name = models.CharField(max_length=256)
    description = models.TextField()
    parent_category = models.ForeignKey(
        "self",
        blank=True,
        null=True,
        related_name="children_categories",
        on_delete=models.CASCADE,
    )

    def __str__(self):
        return self.name
    class Meta:
        verbose_name = 'Категория'
        verbose_name_plural = 'Категории'


class Maker(models.Model):
    name = models.CharField(max_length=512)

    def __str__(self):
        return self.name

serializer.py

from rest_framework import serializers
from .models import *


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

class CategorySerializer(serializers.ModelSerializer):

    class Meta:
        model = Category
        fields ='__all__'
        depth = 1

class MakerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Maker
        fields ='__all__'

class SubcategorySerializer(serializers.ModelSerializer):

    class Meta:
        model  =Category
        fields ='__all__'
        

views.py

from .serializer import *
from rest_framework import generics
from .models import *
from django_filters.rest_framework import DjangoFilterBackend



class ProductList(generics.ListCreateAPIView):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer
    filter_backends = [DjangoFilterBackend]
    filter_fields = ['category']
    

class CategoryList(generics.ListCreateAPIView):
    queryset = Category.objects.all()
    serializer_class = CategorySerializer


class MakerList(generics.ListCreateAPIView):
    serializer_class = MakerSerializer
    queryset = Maker.objects.all()

class sub_category_list(generics.ListCreateAPIView):
    serializer_class = SubcategorySerializer
    queryset = Product.objects.all()
    filter_backends = [DjangoFilterBackend]
    filter_fields = ['category']

urls.py

from django.contrib import admin
from django.urls import path, include, re_path
from main.views import *


urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/vds/product/', ProductList.as_view()),
    path('api/vds/category/', CategoryList.as_view()),
    path('api/vds/maker', MakerList.as_view()),
#    path('api/vds/category/<int:pk>') Здесь я пытался сделать фильтрацию по категории
]


Ответы (0 шт):