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引用非抽象模型类上的值,而不是字段上的抽象值被定义了吗?
还是我愚蠢?
(这可能看起来像一个微不足道的例子,它是:但它只是为了说明我想要做的更重要和更复杂的事情)
提前谢谢了.
我认为发生这种情况是因为使用了 Meta.verbose_name 并且在解析类 NamedModel 时创建了 NamedModel.name 。因此,稍后,当 OwnedModel 类被解析时,就没有机会更改任何内容。
也许您可以稍后在 OwnedModel.name 上设置 help_text 属性,但这也可能会更改 NamedModel.name。
在类似的情况下,我将变量部分放入模型的类属性(而不是元)中,然后使用运行时方法/属性来生成我需要的文本。