Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django modelform在表单级别的验证_Django_Django Forms_Django Crispy Forms_Django Validation - Fatal编程技术网

django modelform在表单级别的验证

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(

我可以为我的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\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
的提示。我有东西在那里,但我删除了它,我会清理这个。