django - 多个模型 - 一个公共(public)主键 (Django)

标签 django inheritance model primary-key parent-child

我祝大家有个美好的一天。正如我在标题中提到的,我想加入多个模型并使用一个全局 ID 标识其中一个,因此 ID 将确定它是哪个模型,并且我将访问它的所有字段。

目前我正在与多表继承作斗争,我遇到了问题。我想要一个父模型和几个子模型,它们会继承父的一些字段。

class Parent(models.Model):
    pass

class Child1(Parent):
    fieldX = models.CharField()

class Child2(Parent):
    fieldY = models.CharField()

但是我想使用主键通过父模型访问 child 。所以...
Parent.objects.all()

也应该返回 Child1 和 Child2 对象及其字段(fieldX,fieldY)。

(假设 pk=1 的父记录是 Child1 模型)

虽然当我尝试通过父模型访问子字段时
child = Parent.objects.get(pk=1)
child.fieldX

django 返回一个 AttributeError:“父”对象没有属性“fieldX”

我的目标是创建类似 的东西所有子模型的一个主键 .这在 Django 中可能吗?分别有没有类似的解决方案或建议?我一直在搜索内容类型或 GUID、UUID 等相关主题,但我想这不是我想要的。感谢您的帮助!

最佳答案

当您制作 Parent.objects.get(pk=1)你得到Child1Child2行好,但 django ORM 正在返回 Parent实例,因为它是 仅检索存储在父表上的数据 .

要获取子模型的实例,您必须执行 parent_instance.childmodelname .

如果您有多个子类,这可能会很快变得困惑,因为您必须确切知道父实例属于哪个子模型才能访问它(例如,如果您尝试访问 parent.child1Child2 实例,它将引发异常)。

我建议您使用 django-model-utils应用程序,它定义了一个名为 InheritanceManager 的自定义管理器您可以在模型上使用它,并将负责检索和返回相应的子模型实例,从而使整个过程变得更加容易。

关于django - 多个模型 - 一个公共(public)主键 (Django),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14992693/

相关文章:

model - 图表和模型有什么区别

python - 保存 django mongoengine 模型实例时,EmbeddedDocumentField 项无效(save() 失败)

django 通过模型将外键对象列表保存到 m2m 字段并进行排序

python - 如何在 Django 中缩放图像

python - 根据选择字段中的值对 Django 查询集进行排序

c++ - 从公共(public)接口(interface)继承时,为什么实现是公共(public)的还是私有(private)的并不重要?

java - 对象创建(状态初始化)和线程安全

Django:ModelForm 管理员的当前用户 ID

django - 如何让网站图标显示在我的 Django 应用程序中?

c++ - 多重继承是编译器编写者的问题吗? -C++