概述
目前我正在与多表继承战斗,我有一个问题.我想有一个父模型和几个子模型,它们将继承父项的一些字段.
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_instance.childmodelname.
如果您有多个子类,这可能会变得非常麻烦,因为您必须确切知道父实例属于哪个子模型,才能访问它(例如,如果您尝试访问parent.child1是一个Child2实例,它会引发异常).
我建议您使用django-model-utils应用程序,该应用程序定义了一个名为InheritanceManager的自定义管理器,您可以在模型上使用该管理器并负责检索和返回相应的子模型实例,从而使整个过程变得更加容易.
总结
以上是编程之家为你收集整理的多个模型 – 一个通用主键(Django)全部内容,希望文章能够帮你解决多个模型 – 一个通用主键(Django)所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧