一个着名的墨西哥卷饼店需要使用模型Combo
,ComboItem
,Ingredient
和Order
构建一个Django应用。
HQ创造了“Hot Taco Combo”。它有三个相关的组合项
纽约特许经营店将Hot Taco Combo添加到他们的菜单中。他们将墨西哥卷饼的价格调整为1.49美元,并将生菜加入炸玉米饼。
客户在墨西哥玉米卷中没有奶酪的情况下订购组合。
HQ将组合的名称更改为Fiery Taco Combo - NY的组合名称更新,但是taco保持相同的自定义价格并且仍包含生菜。
纽约特许经营店的经理查看所有订单,看到 Hot Taco Combo 的一个订单,而且炸玉米饼配料只有贝壳,肉和生菜。
我很难决定处理这个问题的最佳方法,因为Combo
在所有三个级别基本上都是同一个对象,但其相关的ComboItem
对象可能不同。 HQ应该能够像名称一样更新Combo属性,它会更新所有特许经营组合名称,但组合项目自定义应该保留。此外,销售点的组合详细信息和自定义设置一旦记录,就不应更改,以获得准确的订单记录。
最初我认为每个业务级别从每个模型和对象继承的相关模型和对象都有一个AbstractBaseClass
,但这种结构感觉多余且难以维护。
然后我想使用GenericForeignKey
将组合与总部,特许经营或订单相关联,并在必要时重复对象,因为它们向下移动。这感觉奇怪且容易出错。
有没有人处理此类案件或有任何建议?这仅仅是一个复杂的问题,需要一个复杂的解决方案,还是我缺少一个简单的方法?提前谢谢。
答案 0 :(得分:1)
听起来不是抽象基类,而是希望使用多表继承:https://docs.djangoproject.com/en/1.8/topics/db/models/#multi-table-inheritance
我建议您阅读整个文档部分,了解继承样式的选项:https://docs.djangoproject.com/en/1.8/topics/db/models/#model-inheritance