2012-05-09 108 views
0

我正在爲餐廳創建一個菜單系統,並且需要能夠列出具有靈活屬性的菜單項,這些屬性有時可以從模型(數據庫)以django形式進行選擇。由於項目數量和屬性沒有預先定義,所以需要靈活,表單需要能夠呈現。django:餐廳菜單的靈活形式?

示例使用情形:

1. Hawaiian Pizza 
    * unselectable attributes: pineapple, ham (we are assuming you can't change this) 
    * selectable attributes (all boolean True/False): spicy, extra cheese, extra meat, extra pineapple 
    * prices: large - $9.99, extra large - $14.99 

這將作爲渲染:

1. Hawaiian Pizza 
Pineapple and Ham 
[ ] spicy [ ] extra cheese [ ] extra meat [ ] extra ham 

$9.99 { button } 
$14.99 { button } 

這使我下訂單的

一)夏威夷披薩,有額外的奶酪,多餘的肉並且辣!爲$ 14.99

B)夏威夷披薩超大使其辣。大於9.99美元

在理想情況下,我甚至會爲「額外屬性」添加一個價格。

任何人都知道如何獲得靈活的屬性? ...或如何實現這一目標的建議?

這看起來像Drupal本來是理想的,它具有靈活的屬性系統。

回答

1

我想你可以使用額外的模型來選擇與項目相連,是這樣的:

class Option(models.Model): 
    name = models.CharField(...) # group name for radios, option name for checks 
    required = models.BooleanField() # is radio? 

class ItemOptions(models.Model): 
    item = models.ForeignKey(Item) 
    option = models.ForeignKey(Option) 
    value = models.CharField(...) # option value 
    price = models.DecimalField() # if applied 

然後你只需要顯示一個複選框每個可選字段,然後單選按鈕爲每個需要一個(在一個選項的幾個無線電中使用相同的name)。然後把所有訂單數據放在PickleFieldJSONField或者只是添加另一個模型來存儲這些關係。