0

我可以爲我的django模型定製驗證器,我想要做的是在表單元素相互依賴的表單級別執行驗證。爲了說明這一點,說我有以下型號:django modelform驗證在表單級別

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) 

有沒有一種方法來驗證表單作爲一個整體之前提交被觸發?

回答

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__如果你沒有做任何事的;重寫只調用超類方法的方法是沒有意義的。

+0

謝謝!完全錯過了。感謝'__init__'上的提示。我在那裏有東西,但我刪除了它,我會清理它。 – Luca