私は Django を初めて使用し、フォーム処理中の検証手順に関して多少混乱しています。すべてのフォーム フィールド タイプ (私の場合は ModelForm) がデフォルトで必須であることは承知しています。フォームの clean メソッドを呼び出さずに必須のフォーム フィールドが空白のままになっている場合、Django は VaidationError を発生させると想定しました。
clean()
これが、次のメソッドでデータが設定されているかどうかを確認しなかった理由です。
def clean(self):
date = self.cleaned_data.get('date')
time_start = self.cleaned_data.get('time_start')
time_end = self.cleaned_data.get('time_end')
user_type = self.cleaned_data.get('user_type')
if Event.objects.filter(user_type=user_type, date=date,
time_start__lt=time_start,
time_end__gt=time_start).exclude(pk=self.instance.pk).count():
raise forms.ValidationError("Overlapping with another event.")
すべてのフィールドを空白のままフォームを送信すると、
ValueError: None をクエリ値として使用できません。
clean()
メソッドを削除するValidationErrors
と、必要なフィールドに入力しないと予想される結果が得られます。これは、clean()
メソッドがまだ残っている場合に予想されることです。
何がこれを引き起こす可能性がありますか?Django がclean を呼び出す前に必要な値をチェックしないとしたら、私は驚くでしょう。