我有一个由 2 个孩子继承的抽象模型。在孩子们中,一个是设置一个验证器。当我运行代码时,我看到两个孩子都有验证器。
这是伪代码:
class myAbstract(models.Model):
Intro = models.TextField(blank=True, null=True, )
class Meta:
abstract = True
class child1(myAbstract):
class Meta:
verbose_name = 'child 1'
class child2(myAbstract):
def __init__(self, *args, **kwargs):
super(child2, self).__init__(*args, **kwargs)
intro = self._meta.get_field('Intro')
intro.validators.append(MaxLengthValidator(60))
class Meta:
verbose_name = 'child 2'
在管理员中,如果我添加一个 child1,然后添加一个 child2,则验证器会为 child2 启动并限制字符数。如果我从 child2 开始,那么 child2 不会得到验证器。
这是预期的行为吗?如果有,建议的编码方式是什么?我考虑将 Intro 移至子类。
已解决: 正如 Alasdair 指出的那样,验证器是一个类变量,因此这是预期的行为。
我尝试将 Intro 字段移至孩子,但这没有用。我使用了这个解决方案:
https://stackoverflow.com/a/3209550/757955在模型表单中设置 forms.CharField 。