Djangoフォーム
CoddyのDjangoジャーニー「フォーム」セクションの一部。レッスン 5/20。
日付を入力せずにフォームを送信すると、サイトがクラッシュします。Djangoは空のテキストを日付に変換できないためです。各フィールドを手作業で確認するには、すべてのフィールドとエラーごとにコードを書く必要があります。
Djangoのフォームでは、forms.pyにフィールドを一度だけ定義し、各フィールドが受け付ける値を認識します。レストランの予約フォームは次のとおりです。
from django import forms
class BookingForm(forms.Form):
name = forms.CharField(max_length=50)
day = forms.DateField()
guests = forms.IntegerField()別途指定しない限り、すべてのフィールドは必須です。また、CharFieldは最初に空白を取り除くため、空白だけの名前は空として扱われます。
ビューでは、送信されたデータからフォームを作成し、is_valid()を呼び出します。これはすべてのフィールドを検証し、TrueまたはFalseを返します。次に、form.cleaned_dataにはPythonの値に変換されたデータが格納されるため、cleaned_data["day"]はテキストではなくdatetime.dateです。
form = BookingForm(request.POST)
if form.is_valid():
day = form.cleaned_data["day"]チャレンジ
簡単events/forms.pyで、EventFormを作成します。titleとplaceは最大100文字のテキスト、dateは日付にします。new_eventで、これを使ってPOSTを検証します。有効な場合は、変換された値からイベントを作成してリダイレクトします。有効でない場合は、errorにPlease check the form.を設定してページを表示します。
Runを押して、日付を入力せずにフォームを送信します。
自分で試してみよう
from django import forms
フォームのすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド