如何在验证Django中的父字段的子类中添加自定义验证器

时间:2012-05-27 19:06:40

标签: django

在Django中,我有一个带有几个公共字段的父抽象类,以及一些添加更多字段的子类。在其中一些子类中,我想添加验证父类字段的自定义验证器。

class Template(models.Model):
  text = models.CharField(max_length=200)

class GlobalTemplate(Template):
  function = models.ManyToManyField(Function, null=True, blank=True)

我可以轻松地将它们添加到父类的字段中,如下所示:

class Template(models.Model):
  text = models.CharField(max_length=200, validators=[validate_custom])

但在这种情况下,我想将验证器添加到我的子类GlobalTemplate中,但是将它附加到文本字段。

Django有可能吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

字段验证器存储在field.validators中,它是一个列表,因此您基本上需要在那里附加验证器。

要访问字段实例,您必须使用对象的_meta属性进行一些操作(请注意,您不是假设使用此属性,所以当你更新django时,你必须检查它是否没有改变)。这是你如何做到的:

def get_fields_dict(self):
    return dict((field.name, field) for field in self._meta.fields)

def __init__(self, *args, **kwargs):
    super(GlobalTeplate, self).__init__(*args, **kwargs)
    text_field = self.get_fields_dict()['text']
    text_field.validators.append(validate_custom)