加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

多个模型 – 一个通用主键(Django)

发布时间:2020-12-16 21:42:02 所属栏目:Python 来源:网络整理
导读:祝大家度过愉快的一天.正如我在标题中提到的,我想加入多个模型并使用一个全局ID识别其中一个模型,因此ID将确定它是哪个模型,我将访问其所有字段. 目前我正在与多表继承战斗,我有一个问题.我想有一个父模型和几个子模型,它们将继承父项的一些字段. class Pare
祝大家度过愉快的一天.正如我在标题中提到的,我想加入多个模型并使用一个全局ID识别其中一个模型,因此ID将确定它是哪个模型,我将访问其所有字段.

目前我正在与多表继承战斗,我有一个问题.我想有一个父模型和几个子模型,它们将继承父项的一些字段.

class Parent(models.Model):
    pass

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

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

但是,我想使用主键通过父模型访问子项.所以…

Parent.objects.all()

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

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

虽然当我尝试通过父模型访问子字段时

child = Parent.objects.get(pk=1)
child.fieldX

django返回一个AttributeError:’Parent’对象没有属性’fieldX’

我的目标是为所有子模型创建类似于一个主键的东西. Django有可能吗?分别是否有类似的解决方案或建议?我一直在搜索相关的主题,如contenttype或GUID,UUID,但我想这不是我正在寻找的.谢谢您的帮助!

解决方法

当您创建Parent.objects.get(pk = 1)时,您正在获得Child1和Child2行,但是django ORM将返回Parent实例,因为它只检索存储在父表上的数据.

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

如果您有多个子类,这可能会变得非常麻烦,因为您必须确切知道父实例属于哪个子模型,才能访问它(例如,如果您尝试访问parent.child1是一个Child2实例,它会引发异常).

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读