2016-09-07 95 views
0

我正在构建一个向导(使用Django Formtools),可以让您定购一个或多个项目,每个选定项目可以指定所需的数量。Django窗体和many2many.through字段

我想避免传统的购物车系统,并尽可能简化购买。我的导航建议是只有3页/步:

  1. 第一页显示一个窗体包含所有可用项目。可以选择这些项目,访客可以指定数量。
  2. 第二页使得订单摘要和游客被要求填写自己的详细信息
  3. 最后一页确认

我有麻烦了第一步创建形式和我的顺序米寻找帮助找到我尝试的两个选项之间的中间地带。

我的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个具有下拉列表以选择想要的项目的集合。

你会如何将两种方法结合起来得到一张列出所有可用项目的表格,从而可以指定数量?

非常感谢。

回答

1

[编辑]:删除以前的答案,因为它是一个复制错误。

在这个阶段你不处理订单。您提供的产品目录提供生成订单。因此,将您的表单从项目中取出,给复选框和数量输入一个可以链接到项目的名称(合并项目的主键),然后在提交时生成订单。

+0

嗨,我编辑我的问题作为参考软件包是一个错字(为了清晰起见,我将其重命名为包到项目)。 – user1415785