Django, чекбокс, добавление товаров в корзину с размерами, которые пользователь выбирает при нажатии на чекбокс

Добрый день всем.

Пожалуйста, не судите строго, я только учусь. Я начал изучать Django и вроде бы все шло гладко, пока я не столкнулся с проблемой добавления товара в корзину вместе с размером. С добавлением самого товара проблем нет, но мне нужно, чтобы пользователь выбрал размер через чекбокс и после нажатия на кнопку "добавить в корзину" в нее добавился не просто товар, а с нужным выбранным размером.

Здесь представлены модели продуктов, размеры и тележки


class Product(models.Model):
    article = models.CharField(max_length=12,null=False,blank=False,unique=True,primary_key=True)
    img = models.ImageField(upload_to='products_images')
    price = models.DecimalField(max_digits=9,decimal_places=2)
    description = models.TextField(null=True,blank=True)
    gender = models.CharField(max_length=12,null=False,blank=False)
    is_child = models.BooleanField(null=False)
    season = models.CharField(max_length=12,null=False)
    color = models.CharField(max_length=24,null=False)
    sizes = models.ForeignKey(to='Size',on_delete=models.CASCADE,to_field='article')
 
    def __str__(self):
        return f"{self.article}"
 
 
class Size(models.Model):
    article = models.CharField(max_length=12,null=False,unique=True)
    article_size = models.ForeignKey(to='ArticleSize',on_delete=models.CASCADE,to_field='article_size')
 
    def __str__(self):
        return f"{self.article}"
 
class ArticleSize(models.Model):
    article_size = models.CharField(max_length=12, null=False, unique=True)
    size_name = models.CharField(max_length=12,null=False,blank=False)
    qty = models.SmallIntegerField()
    to_article = models.CharField(max_length=12, null=False)
 
    def __str__(self):
        return f"{self.article_size}"
 
class Basket(models.Model):
    user = models.ForeignKey(to=User, on_delete=models.CASCADE)
    product = models.ForeignKey(to=Product, on_delete=models.CASCADE,to_field='article')
    size = models.ForeignKey(to=ArticleSize,on_delete=models.CASCADE,to_field='article_size')
    qty = models.PositiveSmallIntegerField(default=0)
    create_time_stamp = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return f"Корзина для {self.user.email} товар {self.product.article},размер {self.size.size_name}"

Вот модель формы:

class CheckboxForm(forms.Form):
    checkbox_size = forms.CharField(widget=forms.CheckboxInput(attrs={
    'class':'size_checkbox', 'type':'checkbox', 'name':'size_checkbox'}),required=True)
 
    class Meta:
        model = ArticleSize
        fields = ('checkbox_size')

Вот вид:

def products(request):
    form = CheckboxForm()
 
    context = {
        'title': "Магазин",
        'footer_1': "127015, Москва, Бумажный пр-д., д. 14, стр. 2 ООО «НИКАМЕД».",
        'footer_2': "Копирование материалов запрещено.",
        'products': Product.objects.all(),
        'sizes': Size.objects.all(),
        'article_size': ArticleSize.objects.all(),
        'form': form,
 
    }
    return render(request, 'products/products.html', context)
 
def basket_add(request,product,size):
    product = Product.objects.get(article=product)
    size = ArticleSize.objects.get(article_size=size)
    basket = Basket.objects.filter(user=request.user,product=product,size=size)
 
    if not basket.exists():
        Basket.objects.create(user=request.user,product=product,qty=1,size=size)
    else:
        basket = basket.last()
        basket.qty += 1
        basket.save()
    return HttpResponseRedirect(request.META['HTTP_REFERER'])

Вот HTML:

Расскажите, как решаются подобные проблемы? Может быть, я двигаюсь в неправильном направлении и мне нужно все переписать?

Извините за путаницу, я готов разъяснить все, что необходимо.

Заранее всем спасибо!

Я пытаюсь отправить на просмотр товар с выбранным размером.

Я немного подправил код, теперь все работает, ну, почти работает. Если я жестко кодирую данные об объекте size из шаблона в представлении, то все нормально, но если я просто пытаюсь получить значение из request.POST.get('size'), то всегда получаю None.

Вот исправленные модели, шаблон и вид.

Модели:

class Product(models.Model):
article = models.CharField(max_length=12,null=False,blank=False,unique=True,primary_key=True)
img = models.ImageField(upload_to='products_images')
price = models.DecimalField(max_digits=9,decimal_places=2)
description = models.TextField(null=True,blank=True)
gender = models.CharField(max_length=12,null=False,blank=False)
is_child = models.BooleanField(null=False)
season = models.CharField(max_length=12,null=False)
color = models.CharField(max_length=24,null=False)
sizes = models.ForeignKey(to='Size',on_delete=models.CASCADE,to_field='article_size')

def __str__(self):
    return f"{self.article}"

class Size(models.Model): article_size = models.CharField(max_length=12,null=False,unique=True,primary_key=True) название_размера = models.CharField(max_length=12, null=False, blank=False) qty = models.SmallIntegerField() to_article = models.CharField(max_length=12, null=False)

def __str__(self):
    return f"{self.article_size}"

class Basket(models.Model): user = models.ForeignKey(to=User, on_delete=models.CASCADE) product = models.ForeignKey(to=Product, on_delete=models.CASCADE,to_field='article') size = models.ForeignKey(to=Size,on_delete=models.CASCADE,to_field='article_size') qty = models.PositiveSmallIntegerField(default=0) create_time_stamp = models.DateTimeField(auto_now_add=True) def str(self): return f "Корзина для {self.user.email} товара {self.product.article},размер {self.size.size.size_name}"

Шаблон:

Вид:

Does anyone know why None appears when submitting a button? Maybe I forgot to specify an attribute?

Спасибо.

Кто-нибудь знает, почему при отправке кнопки появляется None? Может быть, я забыл указать атрибут?

Спасибо.

Я решил эту проблему. Если кто-то заинтересуется, пожалуйста, дайте мне знать, и я напишу решение здесь.

Вернуться на верх