次のような比較的標準的なRegistrationFormがあります。
class RegisterForm(forms.Form):
username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'username'}), initial='')
email = forms.EmailField(widget=forms.TextInput(attrs={'placeholder': 'email'}), initial='')
password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'password'}), initial='')
password_repeat = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'retype password'}), initial='')
ユーザーが1つ以上のフィールドに入力し忘れたときにエラーを返すクリーンなメソッドを作成するにはどうすればよいですか?(つまり、「メールフィールドに入力するのを忘れた」)
clean()メソッドで次の2つのオプションを試しました(例としてpasswordフィールドとpassword_repeatフィールドを使用します)。
password = self.cleaned_data['password']
password_repeat = self.cleaned_data['password_repeat']
# initial values are set to '' for all fields, see above.
if password == '':
raise forms.ValidationError("You forgot to type in a password.")
elif password_repeat == '':
raise forms.ValidationError("You forgot to retype your password.")
最初のオプションは次を返します。
/homepage/のKeyError
'パスワード'
try:
password = self.cleaned_data['password']
password_repeat = self.cleaned_data['password_repeat']
except KeyError(password):
raise forms.ValidationError("You forgot to fill in the password field.")
2番目のオプションは次を返します。
/homepage/のUnboundLocalError
割り当て前に参照されるローカル変数「パスワード」
残りのフィールドもチェックできるソリューションを提供できる場合はボーナスポイント(ユーザーが正常に送信したデータにバインドされたフォームを返すことができるようにするため)。