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

Jam*_*rce 6 python django inheritance metaclass django-models

我想使用继承模型的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'
Run Code Online (Sandbox Code Playgroud)

我希望OwnedModel表单名称字段上的帮助文本说"这个拥有对象的有意义的名称".但事实并非如此:缺少"拥有"这个词,这表明在建立模型时使用NamedModel.Meta中的verbose_name,而不是OwnedModel.Meta.

这不是我对继承观点的期望:是否有某种方法可以创建字段,Meta.verbose_name引用非抽象模型类上的值,而不是字段上的抽象值被定义了吗?

还是我愚蠢?

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

提前谢谢了.

Ber*_*Ber 1

我认为发生这种情况是因为使用了 Meta.verbose_name 并且在解析类 NamedModel 时创建了 NamedModel.name 。因此,稍后,当 OwnedModel 类被解析时,就没有机会更改任何内容。

也许您可以稍后在 OwnedModel.name 上设置 help_text 属性,但这也可能会更改 NamedModel.name。

在类似的情况下,我将变量部分放入模型的类属性(而不是元)中,然后使用运行时方法/属性来生成我需要的文本。