我可以为我的django模型设置自定义验证器,我想要做的是在表单层执行验证,其中表单元素彼此具有依赖关系。为了说明,我说有以下模型:
class MyModel(models.Model):
num_average = models.IntegerField(verbose_name='Number of averages',
default=1)
num_values = models.IntegerField(verbose_name='Number of values',
default=3)
依赖是num_values = num_average * 3
。我知道我可以自动设置它,但为此我们假设我们想要用户输入。我有一个表格:
class MyForm(ModelForm):
class Meta:
model = MyModel
fields = ['num_average', 'num_values']
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
有没有办法在提交被触发之前验证整个表单?
答案 0 :(得分:2)
是的,正如form docs指出的那样,这种事情是用clean
方法完成的。
class MyForm(ModelForm):
class Meta:
model = MyModel
fields = ['num_average', 'num_values']
def clean(self):
data = self.cleaned_data
if data['num_values'] != data['num_average'] *3:
raise forms.ValidationError('values must be three times average')
顺便说一句,如果你不对它做任何事情,你就不应该定义__init__
;重写一个方法只是为了调用超类方法是没有意义的。