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

関連する問題