django modelform在表单级别的验证
我可以为我的django模型定制验证器,我想做的是在表单级别执行验证,其中表单元素相互依赖。举例来说,假设我有以下模型:django modelform在表单级别的验证,django,django-forms,django-crispy-forms,django-validation,Django,Django Forms,Django Crispy Forms,Django Validation,我可以为我的django模型定制验证器,我想做的是在表单级别执行验证,其中表单元素相互依赖。举例来说,假设我有以下模型: class MyModel(models.Model): num_average = models.IntegerField(verbose_name='Number of averages', default=1) num_values = models.IntegerField(
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\u values=num\u 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)
是否有一种方法可以在触发提交之前对表单进行整体验证?是的,正如前面所指出的,这种事情是通过清除方法完成的
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')
顺便说一句,如果你没有用它做任何事情,你不应该定义\uuuuu init\uuuu
;仅仅为了调用超类方法而重写方法是毫无意义的。谢谢!完全没有注意到这一点。也感谢您提供有关\uuuuu init\uuuu
的提示。我有东西在那里,但我删除了它,我会清理这个。