django:餐厅菜单的灵活形式?

时间:2012-05-09 20:52:18

标签: django django-forms

我正在为餐馆创建菜单系统,并且需要能够列出具有灵活属性的菜单项,这些属性有时可以从模型(数据库)以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 }

这使我能够下订单

a)夏威夷比萨饼,加上额外的奶酪,多余的肉,让它变辣!特大号14.99美元

b)夏威夷比萨饼让它变辣。价格为9.99美元

在理想情况下,我甚至会为“额外属性”添加价格。

任何人都知道如何获得灵活的属性? ...或者如何实现这一目标的建议?

这似乎是Drupal理想的,它具有灵活的属性系统。

1 个答案:

答案 0 :(得分: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中,或者只添加另一个模型来存储这些关系。