Menu
CoddyTech

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"]
challenge icon

チャレンジ

簡単
  • events/forms.pyで、EventFormを作成します。titleとplaceは最大100文字のテキスト、dateは日付にします。
  • new_eventで、これを使ってPOSTを検証します。有効な場合は、変換された値からイベントを作成してリダイレクトします。有効でない場合は、errorにPlease check the form.を設定してページを表示します。

Runを押して、日付を入力せずにフォームを送信します。

自分で試してみよう

from django import forms

フォームのすべてのレッスン

自分で練習してみよう: Djangoプレイグラウンド