2016-09-07 124 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