У меня есть модель продукта, у которой есть количество на складе, и при входе в корзину я хотел бы снять это количество.Я создал три продукта, и у каждого есть в наличии. Но для одного я создал количество 10. Затем я попытался выбрать из TypedChoiceField> выборы.Но мне нужно только одно значение для этого продукта.
from django import forms
from shop.models import Product
class CartProductForm(forms.Form):
product = Product.objects.all()
quantity = forms.TypedChoiceField(choices=[(i.stock, str(i.stock)) for i in product], coerce=int)
update = forms.BooleanField(required=False, initial=False, widget=forms.HiddenInput)
views.py
def cart_update(request, product_id):
cart = Cart(request)
form = CartProductForm(request.POST)
product = Product.objects.get(id=product_id)
if form.is_valid():
cleaned = form.cleaned_data
cart.add(product=product, quantity=cleaned['quantity'], update_quantity=cleaned['update'])
return redirect('cart:cart_show')
cart.py
def add(self, product, quantity=1, update_quantity=False):
product_id = str(product.id)
if product_id not in self.cart:
self.cart[product_id] = {'quantity': 0,'price': str(product.price)}
if update_quantity:
self.cart[product_id]['quantity'] = quantity
else:
self.cart[product_id]['quantity'] += quantity
self.save()
Я знаю, что мне нужно каким-то образом передать идентификатор продукта и использовать
class CartProductForm(forms.Form):
product = Product.objects.get(stock=product.stock)
Помогите мне, пожалуйста, извините за мой английский
models.py
class Product(models.Model):
category = models.ForeignKey(Category, on_delete=models.PROTECT)
subcategory = models.ForeignKey(Subcategory, on_delete=models.PROTECT)
kind = models.ForeignKey(Kind, on_delete=models.PROTECT)
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True)
image = models.ImageField(upload_to=upload_location)
description = models.TextField()
price = models.IntegerField()
stock = models.PositiveIntegerField()
available = models.BooleanField(default=True)
def __str__(self):
return self.name