繁体   English   中英

单个模型对象可以是多个子对象的父对象吗?

[英]Can a single model object be a parent of multiple child objects?

在Django项目中,我有一个有趣的问题,我正在寻找最佳,最可靠的解决方案。 我想要一个由多个可以共享父级的子级子类化的父级对象。

例如,我有以下课程:

class Person(models.Model):
    name = models.CharField(max_length=123)

class Farmer(Person):
    pass

class Preacher(Person):
    pass

有没有办法拥有既是农民又是传教士的Person实例?

如果这不可能或不合理,那么更好的解决方案是简单地在它们之间建立一个OneToOne关系,如下所示:

class Person(models.Model):
    name = models.CharField(max_length=123)

class Farmer(models.Model):
    person = models.OneToOne(Person)

class Preacher(models.Model):
    person = models.OneToOne(Person)

在这里继承不是一个好主意。 请改用OneToOne关系。 @mattm声称它不支持多重继承是不正确的; 一对一限制是每个表 ,因此您确实可以让一个人出现在Farmer表中一次出现在Preacher表中一次。

继承确实存在于数据库世界中,但是至少PostgreSQL并没有很好地实现它,而且由于Postgres总体上倾向于具有良好的标准一致性,因此对于其他数据库系统来说并不是一个好兆头。 我不建议依赖表继承,除非您已检查了将要使用的数据库系统并确认它可以支持用例的各个方面。 实际上,仅使用外键来达到相同的效果时,这样做是不值得的。 所有现代数据库系统都很好地支持了外键和唯一约束(OneToOne的构建基块),并且可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM