在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有可能吗?
谢谢!
答案 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)