2017-11-30 9 views
0

複数のフィールドに依存するフォームの検証チェックがありますが、フォームの上部に表示されるエラーメッセージだけではなく、 (フォームには多くのフィールドがあるので、エラーがどこにあるかを明確に示すことができます)。django形式 - clean()からの特定のフィールド検証エラーを発生させる

回避策として、関連する各フィールドclean_field()のメソッドで同じ検証を作成しようとしましたので、ユーザーはこれらのフィールドの隣にエラーが表示されます。しかし、私はself.cleaned_dataからその特定のフィールドにアクセスすることができるように見えますが、他にはありませんか?

また、フォームclean()からフィールドエラーを発生させることはできますか?

試み1:あなたは複数のフィールドのための洗浄のデータにアクセスしたい場合は

def clean_supply_months(self): 
     if not self.cleaned_data.get('same_address') and not self.cleaned_data.get('supply_months'): 
      raise forms.ValidationError('Please specify time at address if less than 3 years.') 

    def clean_supply_years(self): 
     if not self.cleaned_data.get('same_address') and not self.cleaned_data.get('supply_years'): 
      raise forms.ValidationError('Please specify time at address if less than 3 years.') 

    def clean_same_address(self): 
      ..... 

答えて

2

、あなたはclean_<field>メソッドの代わりにcleanメソッドを使用する必要があります。 add_error()メソッドを使用すると、特定のフィールドにエラーを割り当てることができます。例えば

は、same_addressフィールドにアドレスエラーメッセージで指定してください時間を追加するには、どうなる:

def clean(self): 
    cleaned_data = super(ContactForm, self).clean() 
    if not self.cleaned_data.get('same_address') and not self.cleaned_data.get('supply_months'): 
     self.add_error('same_address', "Please specify time at address if less than 3 years.") 
    return cleaned_data 

は、詳細はvalidating fields that rely on each other上のドキュメントを参照してください。

+0

完璧なおかげで! – Yunti

関連する問題