首页 > 解决方案 > 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)

我想添加一个添加到购物车的表单,以便用户可以将产品添加到他的购物车,问题是每个产品示例的添加到购物车表单都不同:

我所做的是创建另一个模型:

class Color(models.Model):
    Color    = models.CharField(max_length=120)
    def __str__(self):
        return self.Color 

然后向产品模型添加多对多关系:

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)

所以现在当我创建产品时,我可以选择可用的颜色,

但是对于添加到购物车表单,我必须在 products.html 模板中的 html 中对其进行硬编码

产品.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  %}

但我认为这不是最稳健的方式

标签: djangoformsshopping-cart

解决方案


推荐阅读