Дата размера не сохраняется в модели 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)
[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'))