设想
一家著名的 taco 机构想要构建一个 Django 应用程序,其中包含Combo
、ComboItem
、Ingredient
和Order
.
- 总部想要创建包含项目的各种组合,并布置原始项目成分和价格。
- 然后,每个特许经营商可以选择他们将在他们的菜单上销售的组合,并允许调整他们商店的组合项目的价格和成分。
- 当收到订单时,组合和项目详细信息应显示在日志上,并且如果总部重命名组合或特许经营更改价格/成分,则将来不应更改。
用例
HQ 创建了“Hot Taco Combo”。它具有三个相关的组合项目
- 一个炸玉米饼(价格:0.99 美元,配料:贝壳、牛肉、奶酪、辣酱)
- 油条螺旋(价格:0.79 美元)
- 饮料(价格:1.29 美元)
纽约特许经营店将 Hot Taco Combo 添加到他们的菜单中。他们将炸玉米饼的价格调整为 1.49 美元,并在炸玉米饼中加入生菜。
一位顾客订购了玉米卷上没有奶酪的组合。
HQ 将组合的名称更改为 Fiery Taco Combo - 纽约的组合名称更新,但 taco 保持相同的定制价格,仍然包括生菜。
NY 特许经营店的一位经理查看了所有订单,并看到了Hot Taco Combo的一份订单,而炸玉米饼的原料只有壳、肉和生菜。
问题
我正在努力确定处理此问题的最佳方法,因为 aCombo
在所有三个级别上基本上是相同的对象,但其相关ComboItem
对象可能不同。HQ 应该能够更新 Combo 属性,例如名称,它会更新所有特许经营组合名称,但组合项目自定义应该保留。此外,为了准确的订单记录,销售点的组合细节和定制一旦记录就不应更改。
最初我想AbstractBaseClass
在每个业务级别上为每个相关模型和从它们继承的对象都有一个,但这种结构感觉冗余且难以维护。
然后我想使用GenericForeignKey
将组合与总部、特许经营权或订单相关联,并在必要时复制对象,因为它们向下移动。这感觉很奇怪并且容易出错。
有没有人处理过这样的案例或有什么建议?这只是一个复杂的问题并需要一个复杂的解决方案,还是我缺少一种简单的方法?先感谢您。