python - 不能使用继承 Django 模型的 Meta 类来配置继承抽象模型中定义的字段

标签 python django inheritance django-models metaclass

我想使用继承模型的 Meta 类的属性来配置在继承树更高层的抽象模型中定义的字段:

class NamedModel(models.Model):
    class Meta:
        abstract = True
        verbose_name = 'object'

    name = models.CharField("Name",
        max_length=200,
        db_index=True,
        help_text="A meaningful name for this %s." % Meta.verbose_name)
        # see what I'm trying to do here?
    )
    ...

class OwnedModel(NamedModel):
    class Meta(NamedModel.Meta):
        verbose_name = 'owned object'

我希望 OwnedModel 表单的名称字段上的帮助文本显示“此拥有对象的有意义的名称”。 但事实并非如此:缺少“owned”一词,这表明在设置模型时使用了 NamedModel.Meta 中的 verbose_name,而不是 OwnedModel.Meta。

从继承的角度来看,这不是我所期望的:是否有某种方法可以创建字段,Meta.verbose_name 指的是非抽象模型类上的值,而不是抽象模型类上的值定义了哪个字段?

还是我傻了?

(这可能看起来像是一个微不足道的例子,但它确实是:但这只是为了说明我正在尝试做的更重要和更复杂的事情的意义)

非常感谢。

最佳答案

你为什么不尝试上一个类。

class BaseNamedModelMeta:
    abstract = True
    verbose_name = "your text"

然后像这样继承和覆盖你想要的任何东西:

class OwnedModel(NamedModel):
    class Meta(BaseNamedModelMeta):
        verbose_name = 'owned object'

关于python - 不能使用继承 Django 模型的 Meta 类来配置继承抽象模型中定义的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1361791/

相关文章:

python - Sphinx 自动摘要指令中的 "generated"选项是什么?

python - 将 PEP 448 Python 3.5 代码转换为 Python 3.4 兼容

python - Django 可以在没有 FORMS 的情况下上传文件吗?

c# - 从另一个类继承的类是否比不使用继承的类在内存中更大?

java - 哪些行应该取消注释以及为什么、继承

python - 在一个数据框中查找符号并将其替换为跨数千列的另一个数据框中的值

python - TensorFlow 联合 : How can I write an Input Spec for a model with more than one input

django - 通过 URL 传递对象数据

django - 使用 django-tables2 时如何格式化 float 的显示?

c++ - C++ 中的动态内存和继承结构