棘手的模型继承 - Django

Rad*_*Hex 14 python django inheritance django-models django-orm

我觉得这有点棘手,至少对我而言.:)

所以我有4个模特Person,Singer,BassistNinja.

歌手,贝斯手和忍者继承自人.


问题是每个Person都可以是它的任何子类.

例如,一个人可以是歌手和忍者.另一个人可以是贝斯手和忍者.另外一个可以全部三个.

我该如何组织我的模特?


非常感谢帮助!

Ale*_*lli 15

多重继承不适用于数据库(并且您的Django模型最终需要映射到数据库),并且继承通常是模拟"角色"的一种不好的方式(因为人们的角色确实发生了变化).我会将Singer,Bassist和Ninja视为"角色",而不是 Person的子类,并通过外键连接它们:

class Singer(models.Model):
    person = models.ForeignKey('Person')
    # ...

class Person(models.Model):
    # ...
Run Code Online (Sandbox Code Playgroud)

  • @Radiant,看起来像一个歌手,一个忍者可能有一个共同的_model_和_identity_--这太少了,无法付出巨大代价来将遗传强加到关系基板上,更不用说复杂的多重复杂性了*继承(!).只需给两个模型一个名称和一个personID属性,忘记人员模型,并且 - 如果你需要它用于高级业务逻辑 - 一个*应用程序级别*人类(*不是一个模型!)来处理数据库提取并根据需要存储1个以上的实际模型实例,以及行为部分(策略DP建议). (2认同)