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

チャレンジ

簡単

Djangoフォームに新しいイベントを検証させましょう。

  1. events/forms.pyでEventFormを記述します。titleとplaceは最大100文字のテキスト、dateは日付にします。
  2. new_eventでrequest.POSTからフォームを作成します。有効な場合はform.cleaned_dataからイベントを作成して、そのイベントにリダイレクトします。有効でない場合は、errorにPlease check the form.を設定します。

日付を入力せずにフォームを送信すると、Please check the form.と表示されます。

自分で試してみよう

from django import forms

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

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