2

设想

一家著名的 taco 机构想要构建一个 Django 应用程序,其中包含ComboComboItemIngredientOrder.

  1. 总部想要创建包含项目的各种组合,并布置原始项目成分和价格。
  2. 然后,每个特许经营商可以选择他们将在他们的菜单上销售的组合,并允许调整他们商店的组合项目的价格和成分。
  3. 当收到订单时,组合和项目详细信息应显示在日志上,并且如果总部重命名组合或特许经营更改价格/成分,则将来不应更改。

用例

  1. HQ 创建了“Hot Taco Combo”。它具有三个相关的组合项目

    • 一个炸玉米饼(价格:0.99 美元,配料:贝壳、牛肉、奶酪、辣酱)
    • 油条螺旋(价格:0.79 美元)
    • 饮料(价格:1.29 美元)
  2. 纽约特许经营店将 Hot Taco Combo 添加到他们的菜单中。他们将炸玉米饼的价格调整为 1.49 美元,并在炸玉米饼中加入生菜。

  3. 一位顾客订购了玉米卷上没有奶酪的组合。

  4. HQ 将组合的名称更改为 Fiery Taco Combo - 纽约的组合名称更新,但 taco 保持相同的定制价格,仍然包括生菜。

  5. NY 特许经营店的一位经理查看了所有订单,并看到了Hot Taco Combo的一份订单,而炸玉米饼的原料只有壳、肉和生菜。

问题

我正在努力确定处理此问题的最佳方法,因为 aCombo在所有三个级别上基本上是相同的对象,但其相关ComboItem对象可能不同。HQ 应该能够更新 Combo 属性,例如名称,它会更新所有特许经营组合名称,但组合项目自定义应该保留。此外,为了准确的订单记录,销售点的组合细节和定制一旦记录就不应更改。

最初我想AbstractBaseClass在每个业务级别上为每个相关模型和从它们继承的对象都有一个,但这种结构感觉冗余且难以维护。

然后我想使用GenericForeignKey将组合与总部、特许经营权或订单相关联,并在必要时复制对象,因为它们向下移动。这感觉很奇怪并且容易出错。

有没有人处理过这样的案例或有什么建议?这只是一个复杂的问题并需要一个复杂的解决方案,还是我缺少一种简单的方法?先感谢您。

4

1 回答 1

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

于 2015-07-17T12:25:33.380 回答