我正在为餐馆创建菜单系统,并且需要能够列出具有灵活属性的菜单项,这些属性有时可以从模型(数据库)以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理想的,它具有灵活的属性系统。
答案 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
)。然后将所有订单数据放在PickleField
或JSONField
中,或者只添加另一个模型来存储这些关系。