Как суммировать целочисленное поле с числом в модели django 5 и сохранить его

у меня есть модель cartitem:

class CartItem(models.Model):
    cart=models.ForeignKey(Cart,related_name='items',on_delete=models.CASCADE)
    product=models.ForeignKey(Product,on_delete=models.CASCADE)
    quantity=models.PositiveIntegerField(default=0)

при добавлении товара в корзину в режиме просмотра :

class AddToCartView(LoginRequiredMixin,View):
    model = Product
    def post(self, request, *args, **kwargs):
        product = get_object_or_404(Product, pk=kwargs['pk'])
        cart, created = Cart.objects.get_or_create(user=request.user)
        cart_item, created = CartItem.objects.get_or_create(cart=cart, product=product)
        # POST request
        quantity = request.POST.get('quantity')
        try:
            quantity=int(quantity) if quantity else 1
        except ValueError:
            quantity=1       
        cart_item.quantity +=quantity
        cart_item.save()
        # Redirect to cart detail view
        return reverse_lazy('shop:home')

В представлении произошла ошибка: Attribute Error at /product/2/add-to-cart/ proxy объект не имеет атрибута get помогите пожалуйста.

добавьте товар в корзину с помощью этого кода: cart_item.quantity +=quantity, но произошла ошибка.

Проблема заключается в том, что вы возвращаете результат reverse_lazy(…) [Django-doc] в качестве ответа, но это не ответ HTTP. Поэтому вместо него следует использовать return redirect('shop:home').

Мы можем немного сократить количество запросов, отказавшись от получения Product дополнительным запросом, а в случае создания сразу добавить его с нужным количеством:

from django.shortcuts import redirect


class AddToCartView(LoginRequiredMixin, View):
    model = Product

    def post(self, request, *args, **kwargs):
        quantity = request.POST.get('quantity')
        try:
            quantity = int(quantity) if quantity else 1
        except ValueError:
            quantity = 1
        cart, created = Cart.objects.get_or_create(user=request.user)
        cart_item, created = CartItem.objects.get_or_create(
            cart=cart,
            product_id=self.kwargs['product_id'],
            defaults={'quantity': quantity},
        )
        if not created:
            cart_item.quantity = F('quantity') + 1  # avoids a race condition
            cart_item.save()
        return redirect('shop:home')
Вернуться на верх