Django 表单和 many2many.through 字段
Django form and many2many.through field
我正在构建一个向导(使用 Django Formtools),它允许一个人订购一个或多个项目,每个 selected 项目都有可能指定所需的数量。
我想避免经典的购物车系统,让购买尽可能简单。我的导航建议是只有3个pages/steps:
- 第一页显示包含所有可用项目的表单。这些项目可以 selected,访问者可以指定数量。
- 第二页是订单汇总,请访客填写详细信息
- 最后一页确认订单
我在第一步创建表单时遇到问题,我正在寻求帮助以在我尝试过的两个选项之间找到一个中间点。
我的 Django 模型如下所示(为演示而简化):
class Item(models.Model):
name = models.CharField(max_length=255)
price = models.DecimalField(max_digits=5, decimal_places=2)
class Order(TransactionBase):
items = models.ManyToManyField(Item, through='OrderedItem')
class OrderedItem(models.Model):
order = models.ForeignKey(Order)
item = models.ForeignKey(Item)
quantity = models.PositiveSmallIntegerField()
使用以下 ModelForm 我能够列出所有可用的项目:
class OrderSelectionForm(forms.ModelForm):
class Meta:
model = Order
fields = ('items',)
widgets = {
'items': forms.CheckboxSelectMultiple(),
}
但它不允许指定数量...
使用下面的代码,我可以创建一个可以指定数量的表单:
inlineformset_factory(Order, Order.items.through)
但它并没有显示所有可用物品的平面列表,而是显示了 3 套带有下拉列表的 select 想要的物品。
您将如何结合这两种方法来获得一个列出所有可用项目并允许指定数量的表格?
非常感谢。
[编辑]:删除之前的答案,因为它是一个复制错误。
在这个阶段,您不是在处理订单。您提供的产品目录在提交后 生成 订单。因此,将您的表单基于项目,为复选框和数量输入一个可以链接到项目的名称(包含项目的主键),然后在提交时生成订单。
我正在构建一个向导(使用 Django Formtools),它允许一个人订购一个或多个项目,每个 selected 项目都有可能指定所需的数量。
我想避免经典的购物车系统,让购买尽可能简单。我的导航建议是只有3个pages/steps:
- 第一页显示包含所有可用项目的表单。这些项目可以 selected,访问者可以指定数量。
- 第二页是订单汇总,请访客填写详细信息
- 最后一页确认订单
我在第一步创建表单时遇到问题,我正在寻求帮助以在我尝试过的两个选项之间找到一个中间点。
我的 Django 模型如下所示(为演示而简化):
class Item(models.Model):
name = models.CharField(max_length=255)
price = models.DecimalField(max_digits=5, decimal_places=2)
class Order(TransactionBase):
items = models.ManyToManyField(Item, through='OrderedItem')
class OrderedItem(models.Model):
order = models.ForeignKey(Order)
item = models.ForeignKey(Item)
quantity = models.PositiveSmallIntegerField()
使用以下 ModelForm 我能够列出所有可用的项目:
class OrderSelectionForm(forms.ModelForm):
class Meta:
model = Order
fields = ('items',)
widgets = {
'items': forms.CheckboxSelectMultiple(),
}
但它不允许指定数量...
使用下面的代码,我可以创建一个可以指定数量的表单:
inlineformset_factory(Order, Order.items.through)
但它并没有显示所有可用物品的平面列表,而是显示了 3 套带有下拉列表的 select 想要的物品。
您将如何结合这两种方法来获得一个列出所有可用项目并允许指定数量的表格?
非常感谢。
[编辑]:删除之前的答案,因为它是一个复制错误。
在这个阶段,您不是在处理订单。您提供的产品目录在提交后 生成 订单。因此,将您的表单基于项目,为复选框和数量输入一个可以链接到项目的名称(包含项目的主键),然后在提交时生成订单。