无法从超类访问 Django 模型的子类

Posted

技术标签:

【中文标题】无法从超类访问 Django 模型的子类【英文标题】:Subclass of Django Model Not Accessible from Superclass 【发布时间】:2015-08-27 19:21:16 【问题描述】:

我正在尝试在 Django 中创建一个继承模型,如下所示。我应该能够调用,例如 superclass= Superclass(),我应该能够调用 superclass.subclass,并访问必要的字段。当我这样做时,我被告知“预期有 1 个参数,给出了 8 个参数”:知道我哪里出错了吗?

class Superclass(models.Model):
        pass

class Subclass(Superclass):
        def __init__(self):
                super(Subclass, self).__init__()

【问题讨论】:

您的 super 调用也不起作用,因为您只能将类用作 super 的第一个参数。 IE。 super(Subclass, self) 不是 super(Group, self) 是的 - 这是问题中的错误,但不是问题。 另外,无论如何你都无法做到superclass.subclass - 继承是一种“is-a”关系,而不是“has-a”。 【参考方案1】:

这里的问题是子类构造函数和超类构造函数中需要*args**kwargs。这两个字段将接受参数和对象:其中包括超类的字段信息以及对象管理器等。这应该可以解决问题:

class Subclass(Superclass):
    def __init__(self, *args, **kwargs):
            super(Subclass, self).__init__(*args, **kwargs)

【讨论】:

以上是关于无法从超类访问 Django 模型的子类的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 从超类确定和访问子类

Django模型继承:使用现有超类创建子类

Django,Python继承:从超类中排除一些字段

如何使子类只能从实例访问?

子类没有正确地从超类继承结构[重复]

输入输出下