1つのフィールドをチェックする
CoddyのDjangoジャーニー「フォーム」セクションの一部。レッスン 10/20。
このフォームは、昨年の日付のイベントを受け付けます。Django に組み込まれているチェック機能で確認できるのは型や制限であり、サイト独自のルールではありません。1つのフィールドに対する独自のルールは、clean_にフィールド名を続けた名前のメソッドに記述します。スタッフ用に「admin」という名前を使えないようにする登録フォームの例です。
class SignupForm(forms.Form):
username = forms.CharField(max_length=30)
def clean_username(self):
username = self.cleaned_data["username"]
if username.lower() == "admin":
raise forms.ValidationError("That name is reserved.")
return usernameis_valid()はフィールド固有のチェックの後にこのメソッドを呼び出すため、値はすでに変換されています。たとえば、DateFieldは日付を返します。forms.ValidationErrorを発生させると、そのフィールドは無効となり、メッセージがフィールドの横に表示されます。
このメソッドは値を返さなければなりません。返した値はcleaned_dataに格納されます。returnがないと、値はNoneになります。
チャレンジ
簡単EventFormで、今日より前の日付は「The date cannot be in the past.」というメッセージで拒否します。今日の日付のイベントは問題ありません。
昨日の日付のイベントを、2026-10-30 のように入力して追加すると、「日付を過去の日付にすることはできません。」と表示されます。
自分で試してみよう
from django import forms
class EventForm(forms.Form):
title = forms.CharField(max_length=100)
date = forms.DateField()
place = forms.CharField(max_length=100)
description = forms.CharField(widget=forms.Textarea, required=False)
capacity = forms.IntegerField(min_value=1)
フォームのすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド