Преобразование представления на основе функций в представление на основе классов (DRF)

может ли кто-нибудь помочь мне преобразовать этот функциональный компонент в представление на основе класса (rest framework concrete view)?

Я пробовал конвертировать, но столкнулся с ошибкой, где serializer является false.

В запросе требуется изображение продукта.

class Product(models.Model):
    title = models.CharField(max_length=200, unique=True)
    slug = models.SlugField(max_length=200, unique=True)
    description = models.TextField()
    price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
    stock = models.IntegerField()
    is_available = models.BooleanField(default=True)
    brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    created_date = models.DateTimeField(auto_now_add=True)
    updated_date = models.DateTimeField(auto_now=True)

class ProductImage(models.Model):
    image = models.ImageField(upload_to=get_upload_path)
    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name="product_images")

def store(request, category_slug): 
    cat = None 
    products = None

if category_slug != None:
    cat = get_object_or_404(Category, slug=category_slug)
    products = Product.objects.filter(category=cat)
    product_count = products.count()
else:
    products = Product.objects.filter(is_available=True)
    products.count()

context = {
    'products': products,
    'product_count': product_count
}
return render(request, 'store.html', context)

что я пробовал с rest framework.

Сериализаторы:

class ProductImageSerializer(serializers.ModelSerializer): 
    class Meta: model = ProductImage 
    fields = ('image',)

class ProductSerializer(serializers.ModelSerializer): 
    product_images = ProductImageSerializer(many=True, read_only=True)

    class Meta:
        model = Product
        fields = "__all__"

    def create(self, validated_data):
        profile_data = validated_data.pop('product_images')
        product = Product.objects.create(**validated_data)
    return product

View: Я пробовал с конкретными представлениями, продукт фильтруется по категории.

class Store(generics.ListCreateAPIView): 
    queryset = Product.objects.filter(is_available=True) 
    serializer_class = ProductSerializer 
    lookup_field = 'category_slug' 
    lookup_url_kwarg = 'category_slug'

    def list(self, request, *args, **kwargs):
        queryset = self.get_queryset()
        cat_slug = self.kwargs.get('category_slug')
        products = None

        if cat_slug is not None:
           category = get_object_or_404(Category, slug=cat_slug)
           products = queryset.filter(category=category, is_available=True)
        else:
           products = queryset.filter(is_available=True)
        if products.count() == 1:
           serializer = ProductSerializer(data=products.first())
        elif products.count() > 1:
           serializer = ProductSerializer(data=products, many=True)
    
    if not serializer.is_valid():
        print(serializer.errors)

    data = serializer.data
    return Response(data, status=status.HTTP_200_OK)

любая помощь будет оценена по достоинству.

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