2

在 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 中可能吗?

谢谢!

4

1 回答 1

3

字段验证器存储在 中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)
于 2012-05-27T21:00:50.993 回答