gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:23:17 28 4
gpt4 key购买 nike

在 Django 项目中,我遇到了一个有趣的问题,我正在寻找最好、最强大的解决方案。我想要一个父对象,该对象由多个可以共享父对象的子对象创建子类。

例如,我有以下类(class):

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 的构建 block )在所有现代数据库系统上都得到很好的支持,并且可以正常工作。

关于python - 单个模型对象可以是多个子对象的父对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32899769/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com