相关疑难解决方法(0)

我应该以任何方式避免Django中的多表(具体)继承吗?

许多有经验的开发人员建议不要使用Django多表继承,因为它的性能很差:

  1. Django的疑难杂症:混凝土继承雅各布·卡普兰,莫斯,Django的一个核心因素.

    几乎在所有情况下,抽象继承是一种长期更好的方法.我看到在混凝土继承引入的负载下,有很多网站被粉碎,所以我强烈建议Django用户在大量怀疑的情况下使用具体的继承.

  2. Django中的两勺丹尼尔·格林菲尔德(@pydanny)

    多表继承,有时称为"具体继承",作者和许多其他开发人员认为这是一件坏事.我们强烈建议不要使用它.

    不惜一切代价,每个人都应该避免多表继承,因为它会增加混乱和大量开销.而不是多表继承,在模型之间使用显式OneToOneFields和ForeignKeys,以便您可以控制何时遍历连接.

但是没有多表继承,我不能轻易

  1. 另一个模型中的参考基础模型(必须使用GenericForeignKey或反向依赖);

  2. 获取基本模型的所有实例.

    (随意添加更多)

那么Django中这种继承有什么问题?为什么明确的OneToOneField更好?

性能对JOIN的影响有多大?有没有显示性能差异的基准测试?

不会select_related()让我们连接被调用时控制?


我已经将具体示例移到了一个单独的问题,因为这个问题变得过于宽泛,并且添加了使用多表继承的原因列表.

django inheritance models concrete-inheritance multi-table-inheritance

40
推荐指数
4
解决办法
7026
查看次数