Дата размера не сохраняется в модели cartitem, но товар сохраняется... Есть решение, как сохранить также данные о размере?

views.py

def add_to_cart(request, pk):

    variant = request.GET.get('variant')
    
    product = Product.objects.get(pk =pk)
    user = request.user
    cart , _ = Cart.objects.get_or_create(user = user, is_paid = False)
    cart_item = CartItem.objects.create(cart = cart , product = product ,)

    if variant:
        variant = request.GET.get('variant')
        size_variant = SizeVariant.objects.get(size_name = variant)
        color_variant = ColorVariant.objects.get(color_name = variant)
        cart_item.color_variant = color_variant
        cart_item.size_variant = size_variant
        cart_item.save()

    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

models.py

class CartItem(models.Model):
cart = models.ForeignKey(Cart, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
color_variant = models.ForeignKey(ColorVariant, on_delete=models.CASCADE,null=True, blank=True)
size_variant = models.ForeignKey(SizeVariant, on_delete=models.CASCADE ,null=True, blank=True)
quantity = models.PositiveIntegerField(default=0)
coupon = models.ForeignKey(Coupon, on_delete=models.SET_NULL, null=True, blank=True)

enter image description here

[22/Aug/2022 16:17:38] "GET /account/add_to_cart/1/?variant= HTTP/1.1" 302 0

XXX

16049.0

Получите id варианта вместо имени. Просто отправьте id с помощью ajax, как вы получили имя того же объекта.

def add_to_cart(request, pk):

    variant = request.GET.get('variant')
    
    product = Product.objects.get(pk =pk)
    user = request.user
    cart , _ = Cart.objects.get_or_create(user = user, is_paid = False)
    cart_item = CartItem.objects.create(cart = cart , product = product ,)

    if variant:
        variant_id = request.GET.get('variant_id')
        size_variant = SizeVariant.objects.get(id=variant_id)
        color_variant = ColorVariant.objects.get(id=variant_id)
        cart_item.color_variant = color_variant
        cart_item.size_variant = size_variant
        cart_item.save()

    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

Я могу помочь вам с ajax, если вы можете поделиться ajax стороной этой страницы.

Я не знаю, в чем именно проблема, но я бы рекомендовал использовать get_object_or_404(), а также создавать экземпляр напрямую, используя create() вместо того, чтобы сначала создавать, а затем обновлять, поэтому попробуйте следующий вид:

def add_to_cart(request, pk):

    variant = request.GET.get('variant')
    
    product = get_object_or_404(Product,pk=pk)
    user = request.user
    cart , _ = Cart.objects.get_or_create(user = user, is_paid = False)

    if variant:
        size_variant = get_object_or_404(SizeVariant,size_name=variant)
        color_variant = get_object_or_404(ColorVariant,color_name=variant)
        CartItem.objects.create(cart = cart, product = product,color_variant=color_variant,size_variant=size_variant)

    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Вернуться на верх