场景
一家知名的taco公司希望构建一款型号为Combo
、ComboItem
、Ingredient
和Order
的Django应用程序。
- 总部希望用包含的物品创建各种组合,并布局原始物品的成分和价格
- 然后,每个特许经营店都可以选择他们将在菜单上出售的组合,并可以调整他们商店的组合商品的价格和成分
- 当收到订单时,组合和商品详细信息应显示在日志上,如果总部重新命名组合或特许经营更改价格/成分,则未来不应更改
用例
-
总部创建了"热玉米饼组合"。它有三个相关的组合项目
- 一份墨西哥玉米卷(价格:0.99美元,配料:贝壳、牛肉、奶酪、辣酱(
- churro螺旋(价格:.79美元(
- 饮料(价格:1.29美元(
-
纽约的特许经营店在菜单上增加了热玉米饼套餐。他们将玉米卷的价格调整到1.49美元,并在玉米卷中加入生菜。
-
一位顾客点了墨西哥卷饼上没有奶酪的套餐。
-
总部将该组合的名称更改为Fiery Taco combo-纽约的组合名称更新,但该玉米卷保持不变的自定义价格,仍包括生菜。
-
纽约特许经营店的一位经理查看了所有订单,并查看了热玉米饼组合的一份订单,而玉米饼的配料只有外壳、肉和生菜。
问题
我正在努力决定处理这一问题的最佳方式,因为Combo
在所有三个级别上基本上都是相同的对象,但其相关的ComboItem
对象可能不同。HQ应该能够更新组合属性,如名称,它将更新所有特许经营组合名称,但组合项自定义应该保留。此外,为了获得准确的订单记录,销售点的组合详细信息和定制信息在记录后永远不应更改。
最初,我想为每个相关的模型和对象都有一个AbstractBaseClass
,这些模型和对象在每个业务级别继承自它们,但这种结构感觉是多余的,很难维护。
然后,我想使用GenericForeignKey
将组合与总部、特许经营或订单相关联,并在必要时在对象向下移动时复制对象。这感觉很奇怪而且容易出错。
有人处理过这样的案件吗?或者有什么建议吗?这只是一个复杂问题,需要一个复杂的解决方案,还是我缺少一个简单的方法?提前谢谢。
听起来,您希望使用多表继承,而不是抽象基类:https://docs.djangoproject.com/en/1.8/topics/db/models/#multi-表继承
我建议阅读整个文档部分,看看您对继承样式的选择是什么:https://docs.djangoproject.com/en/1.8/topics/db/models/#model-继承