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  %}

но я не думаю, что это самый надежный способ

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