django - 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
然后向产品模型添加多对多关系:
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 %}
但我认为这不是最稳健的方式
解决方案
推荐阅读
- javascript - 如何在 Charts.JS 中为单个值在折线图中绘制一条线
- python - 可调整 lambda 到不同的列表
- php - 无法使用带有 Laravel 的 LibreOffice 将 word doc 转换为 pdf
- amazon-web-services - 从 s3 存储桶获取的 AWS athena 查询结果文件
- node.js - 如何使用 typeorm 初始化传入对象的实体
- tensorflow - GradientTape 不计算梯度
- javascript - 我用于清除表单文本输入字段的 javascript 函数不起作用
- django - 如何单击电子邮件中的链接
- c - 如何在不使用 while 循环的情况下找到 C 字符串的大小?
- scala - Hive sql - 在多个分区之间