表单级别的 django 模型表单验证
django modelform validation at the form level
我可以为我的 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)
有没有办法在触发提交之前验证整个表单?
是的,正如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__
;重写方法只是为了调用超类方法是没有意义的。
我可以为我的 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)
有没有办法在触发提交之前验证整个表单?
是的,正如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__
;重写方法只是为了调用超类方法是没有意义的。