Получена ошибка AttributeError при попытке получить значение для поля `user` на сериализаторе `cart_serializer`.

Получена ошибка AttributeError при попытке получить значение для поля user на сериализаторе cart_serializer. Поле сериализатора может быть названо неверно и не совпадать с атрибутом или ключом экземпляра QuerySet. Оригинальный текст исключения был следующим: объект 'QuerySet' не имеет атрибута 'user.

Views.py


class view_cart(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request, total=0, quantity = 0, cart_items=None):
        grand_total = 0
        delivery=0
        
        cart = Cart.objects.get(user=request.user)
        cart_items = CartItems.objects.filter(cart=cart)
        print(cart_items)
        for item in cart_items:
            total += item.product.price * item.quantity
            quantity += item.quantity
        delivery = 150
        grand_total = total + delivery


        serializer = cart_serializer(
            cart_items,
            context={"total": total, "grand_total": grand_total, "delivery": delivery},
        )
        return Response(serializer.data)


Seralizer.py

class cart_serializer(ModelSerializer):
    total = SerializerMethodField()
    delivery = SerializerMethodField()
    grand_total = SerializerMethodField()

    class Meta:
        model = Cart
        fields = ["id", "user", "total", "delivery", "grand_total"]

    def get_total(self, *args, **kwargs):
        return self.context["total"]

    def get_delivery(self, *args, **kwargs):
        return self.context["delivery"]

    def get_grand_total(self, *args, **kwargs):
        return self.context["grand_total"]

Models.py

class Cart(models.Model):
    user = models.ForeignKey(Account, on_delete=models.CASCADE)
    date_added = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = 'Cart'

    def __str__(self):
        return self.user.email


class CartItems(models.Model):
    cart = models.ForeignKey(Cart, on_delete=models.CASCADE)
    product = models.ForeignKey(Products, on_delete=models.CASCADE)
    quantity = models.IntegerField()

    class Meta:
        verbose_name_plural = 'Cart Items'

    def sub_total(self):
        return self.product.price * self.quantity

    def __str__(self):
        return self.product.product_name



Не знаю, почему появляется эта ошибка

cart_serializer ожидает экземпляр Cart, а не CartItems queryset.

class view_cart(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request, total=0, quantity = 0, cart_items=None):
        grand_total = 0
        delivery=0
        
        cart = Cart.objects.get(user=request.user)
        cart_items = CartItems.objects.filter(cart=cart)
        print(cart_items)
        for item in cart_items:
            total += item.product.price * item.quantity
            quantity += item.quantity
        delivery = 150
        grand_total = total + delivery


        serializer = cart_serializer(
            cart, # ==> Here use the cart instance..
            context={"total": total, "grand_total": grand_total, "delivery": delivery},
        )
        return Response(serializer.data)
Вернуться на верх