2012-05-09 65 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或者只是添加另一个模型来存储这些关系。