Фильтр текущих продуктов пользователя с использованием набора запросов в DRF возвращает []

Я пытаюсь отфильтровать список продуктов, связанных с пользователем. Я хочу отобразить только продукты текущего пользователя вместо того, чтобы перечислять все.

Я пробовал это

class ProductCreateList(generics.ListCreateAPIView):
    serializer_class = ProductSerializer

    def get_queryset(self):
        user = self.request.user
        return Product.objects.filter(user=user.id)

serializers.py

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ['id', 'user', 'name', 'imgUrl', 'selling_price', 'actual_price', 'quantity', 'get_profit']

models.py

class Product(models.Model):
    user = models.ForeignKey('accounts.Account', on_delete=models.CASCADE, default=1)
    name = models.CharField(max_length=100, null=True, blank=True)
    imgUrl = models.TextField(default='')
    selling_price = models.FloatField(null=True, blank=True)
    actual_price = models.FloatField(null=True, blank=True)
    quantity = models.IntegerField()

При попытке выполнить конечную точку я получил объект []. В чем моя ошибка?

Есть несколько ошибок, в основном в вашем представлении. Я сделал следующее:

models.py

from django.db import models
from django.contrib.auth import get_user_model

class Product(models.Model):
    user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, default=1)
    name = models.CharField(max_length=100, null=True, blank=True)
    imgUrl = models.TextField(default='')
    selling_price = models.FloatField(null=True, blank=True)
    actual_price = models.FloatField(null=True, blank=True)
    quantity = models.IntegerField()

    class Meta:
        db_table = 'product'

serializers.py: Удалите поле 'get_profit' или реализуйте поле serializermethodfield

from rest_framework import serializers
from core.models import Product

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ['id', 'user', 'name', 'imgUrl', 'selling_price', 'actual_price', 'quantity']

views.py: Для фильтрации по пользователю гарантируйте, что пользователь аутентифицирован и имеет разрешение auth, используя классы аутентификации и классы разрешений. Используйте хук filter_queryset для фильтрации набора запросов по пользователю.

from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework import generics
from core.api.serializers import ProductSerializer
from core.models import Product

class ProductCreateList(generics.ListCreateAPIView):
    authentication_classes = [SessionAuthentication, BasicAuthentication]  
    permission_classes = [IsAuthenticated]

    serializer_class = ProductSerializer
    queryset = Product.objects.all()

    def filter_queryset(self, queryset):
        queryset = queryset.filter(user=self.request.user)
        return super().filter_queryset(queryset)
Вернуться на верх