Django форма добавления в корзину
у меня есть модель продукта :
class Product(models.Model):
thumbnail =models.ImageField(upload_to=upload_image_path,null=True,blank=True)
title = models.CharField(max_length=120)
description = models.TextField()
price = models.DecimalField(decimal_places=2, max_digits=20, default=39.99)
discount = models.DecimalField(decimal_places=2, max_digits=20, default=00.00)
slug = models.SlugField(blank=True, unique=True)
и я хочу сделать форму добавления в корзину, чтобы пользователь мог добавлять товары в корзину, проблема в том, что форма добавления в корзину отличается для каждого товара, пример:
- для продукта A: доступные цвета: синий и желтый, доступный размер: S, M
- для продукта B: доступные цвета: черный и белый, доступный размер: L, XL
что я сделал, так это создал другую модель:
class Color(models.Model):
Color = models.CharField(max_length=120)
def __str__(self):
return self.Color
и затем добавьте отношение ManyToMany к модели продукта:
class Product(models.Model):
thumbnail =models.ImageField(upload_to=upload_image_path,null=True,blank=True)
title = models.CharField(max_length=120)
description = models.TextField()
price = models.DecimalField(decimal_places=2, max_digits=20, default=39.99)
discount = models.DecimalField(decimal_places=2, max_digits=20, default=00.00)
slug = models.SlugField(blank=True, unique=True)
Color = models.ManyToManyField(Color)
теперь при создании продукта я могу выбрать доступные цвета,
но для формы добавления в корзину я должен жестко закодировать ее в html в шаблоне products.html
products.html :
{% for product in products %}
<div class="card" style="width: 18rem;">
<img class="card-img-top" src="{{product.thumbnail.url}}" alt="Card image cap">
<div class="card-body">
<h5 class="card-title">{{product}}</h5>
<p class="card-text">{{product.description}}</p>
<form method="POST" action="{% url 'add_to_cart' %}" >
{% csrf_token %}
<input type="hidden" name ="slug" value="{{product.slug}}">
<label for="cars">Choose a color:</label>
<select name="colors" >
{% for color in product.Color %}
<option value="{{color}}">{{color}}</option>
</select>
<button class="btn btn-primary" type="submit"> add to cart</button>
</form>
</div>
</div>
{% endfor %}
но я не думаю, что это самый надежный способ