フォームフィールド
- class Field(**kwargs)
Form
クラスを作成する場合、最も重要な部分はフォームのフィールドを定義することです。 各フィールドには、他のいくつかのフックとともに、カスタム検証ロジックがあります。
- Field.clean(value)
Field
クラスを使用する主な方法は、Form
クラスですが、それらをインスタンス化して直接使用することで、それらがどのように機能するかをよりよく理解することもできます。 各Field
インスタンスにはclean()
メソッドがあります。このメソッドは、単一の引数を取り、django.forms.ValidationError
例外を発生させるか、クリーンな値を返します。
>>> from django import forms
>>> f = forms.EmailField()
>>> f.clean('foo@example.com')
'foo@example.com'
>>> f.clean('invalid email address')
Traceback (most recent call last):
...
ValidationError: ['Enter a valid email address.']
コアフィールド引数
各Field
クラスコンストラクターは、少なくともこれらの引数を取ります。 一部のField
クラスは、追加のフィールド固有の引数を取りますが、常にを受け入れる必要があります。
required
- Field.required
デフォルトでは、各Field
クラスは値が必須であると想定しているため、空の値(None
または空の文字列(""
))を渡すと、 [ X156X]はValidationError
例外を発生させます:
>>> from django import forms
>>> f = forms.CharField()
>>> f.clean('foo')
'foo'
>>> f.clean('')
Traceback (most recent call last):
...
ValidationError: ['This field is required.']
>>> f.clean(None)
Traceback (most recent call last):
...
ValidationError: ['This field is required.']
>>> f.clean(' ')
' '
>>> f.clean(0)
'0'
>>> f.clean(True)
'True'
>>> f.clean(False)
'False'
フィールドが必須ではないであることを指定するには、required=False
をField
コンストラクターに渡します。
>>> f = forms.CharField(required=False)
>>> f.clean('foo')
'foo'
>>> f.clean('')
''
>>> f.clean(None)
''
>>> f.clean(0)
'0'
>>> f.clean(True)
'True'
>>> f.clean(False)
'False'
Field
にrequired=False
があり、clean()
に空の値を渡すと、clean()
は正規化の空の値を返すのではなく返します。 ValidationError
。 CharField
の場合、これは空の文字列になります。 他のField
クラスの場合、None
の場合があります。 (これはフィールドごとに異なります。)
必須のフォームフィールドのウィジェットには、required
HTML属性があります。 Form.use_required_attribute 属性をFalse
に設定して、無効にします。 required
属性は、フォームセットを追加および削除するときにブラウザーの検証が正しくない可能性があるため、フォームセットのフォームには含まれていません。
label
- Field.label
label
引数を使用すると、このフィールドに「人に優しい」ラベルを指定できます。 Field
がForm
に表示されている場合に使用します。
上記の「フォームをHTMLとして出力する」で説明したように、Field
のデフォルトのラベルは、すべてのアンダースコアをスペースに変換し、最初の文字を大文字にすることによって、フィールド名から生成されます。 デフォルトの動作で適切なラベルが得られない場合は、label
を指定してください。
これは、2つのフィールドにlabel
を実装する完全な例Form
です。 出力を簡略化するためにauto_id=False
を指定しました。
>>> from django import forms
>>> class CommentForm(forms.Form):
... name = forms.CharField(label='Your name')
... url = forms.URLField(label='Your website', required=False)
... comment = forms.CharField()
>>> f = CommentForm(auto_id=False)
>>> print(f)
<tr><th>Your name:</th><td><input type="text" name="name" required></td></tr>
<tr><th>Your website:</th><td><input type="url" name="url"></td></tr>
<tr><th>Comment:</th><td><input type="text" name="comment" required></td></tr>
label_suffix
- Field.label_suffix
label_suffix
引数を使用すると、フォームの label_suffix をフィールドごとにオーバーライドできます。
>>> class ContactForm(forms.Form):
... age = forms.IntegerField()
... nationality = forms.CharField()
... captcha_answer = forms.IntegerField(label='2 + 2', label_suffix=' =')
>>> f = ContactForm(label_suffix='?')
>>> print(f.as_p())
<p><label for="id_age">Age?</label> <input id="id_age" name="age" type="number" required></p>
<p><label for="id_nationality">Nationality?</label> <input id="id_nationality" name="nationality" type="text" required></p>
<p><label for="id_captcha_answer">2 + 2 =</label> <input id="id_captcha_answer" name="captcha_answer" type="number" required></p>
initial
- Field.initial
initial
引数を使用すると、このField
をバインドされていないForm
でレンダリングするときに使用する初期値を指定できます。
動的初期データを指定するには、 Form.initial パラメーターを参照してください。
このユースケースは、フィールドが特定の値に初期化される「空の」フォームを表示する場合です。 例えば:
>>> from django import forms
>>> class CommentForm(forms.Form):
... name = forms.CharField(initial='Your name')
... url = forms.URLField(initial='http://')
... comment = forms.CharField()
>>> f = CommentForm(auto_id=False)
>>> print(f)
<tr><th>Name:</th><td><input type="text" name="name" value="Your name" required></td></tr>
<tr><th>Url:</th><td><input type="url" name="url" value="http://" required></td></tr>
<tr><th>Comment:</th><td><input type="text" name="comment" required></td></tr>
フォームを表示するときに、初期値の辞書をデータとして渡すだけではどうでしょうか。 そうすると、検証がトリガーされ、HTML出力に検証エラーが含まれます。
>>> class CommentForm(forms.Form):
... name = forms.CharField()
... url = forms.URLField()
... comment = forms.CharField()
>>> default_data = {'name': 'Your name', 'url': 'http://'}
>>> f = CommentForm(default_data, auto_id=False)
>>> print(f)
<tr><th>Name:</th><td><input type="text" name="name" value="Your name" required></td></tr>
<tr><th>Url:</th><td><ul class="errorlist"><li>Enter a valid URL.</li></ul><input type="url" name="url" value="http://" required></td></tr>
<tr><th>Comment:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="comment" required></td></tr>
これが、initial
値がバインドされていないフォームに対してのみ表示される理由です。 バインドされたフォームの場合、HTML出力はバインドされたデータを使用します。
また、initial
の値は、特定のフィールドの値が指定されていない場合、検証の「フォールバック」データとしてではなく使用されることに注意してください。 initial
の値は、初期フォーム表示を目的としたのみです。
>>> class CommentForm(forms.Form):
... name = forms.CharField(initial='Your name')
... url = forms.URLField(initial='http://')
... comment = forms.CharField()
>>> data = {'name': '', 'url': '', 'comment': 'Foo'}
>>> f = CommentForm(data)
>>> f.is_valid()
False
# The form does *not* fall back to using the initial values.
>>> f.errors
{'url': ['This field is required.'], 'name': ['This field is required.']}
定数の代わりに、呼び出し可能なものを渡すこともできます。
>>> import datetime
>>> class DateForm(forms.Form):
... day = forms.DateField(initial=datetime.date.today)
>>> print(DateForm())
<tr><th>Day:</th><td><input type="text" name="day" value="12/23/2008" required><td></tr>
呼び出し可能オブジェクトは、定義されているときではなく、バインドされていないフォームが表示されているときにのみ評価されます。
widget
- Field.widget
widget
引数を使用すると、このField
をレンダリングするときに使用するWidget
クラスを指定できます。 詳細については、ウィジェットを参照してください。
help_text
- Field.help_text
help_text
引数を使用すると、このField
の説明テキストを指定できます。 help_text
を指定すると、Field
が便利なForm
メソッドの1つ(as_ul()
)。
モデルフィールドの help_text と同様に、この値は自動生成されたフォームでHTMLエスケープされません。
これは、2つのフィールドにhelp_text
を実装する完全な例Form
です。 出力を簡略化するためにauto_id=False
を指定しました。
>>> from django import forms
>>> class HelpTextContactForm(forms.Form):
... subject = forms.CharField(max_length=100, help_text='100 characters max.')
... message = forms.CharField()
... sender = forms.EmailField(help_text='A valid email address, please.')
... cc_myself = forms.BooleanField(required=False)
>>> f = HelpTextContactForm(auto_id=False)
>>> print(f.as_table())
<tr><th>Subject:</th><td><input type="text" name="subject" maxlength="100" required><br><span class="helptext">100 characters max.</span></td></tr>
<tr><th>Message:</th><td><input type="text" name="message" required></td></tr>
<tr><th>Sender:</th><td><input type="email" name="sender" required><br>A valid email address, please.</td></tr>
<tr><th>Cc myself:</th><td><input type="checkbox" name="cc_myself"></td></tr>
>>> print(f.as_ul()))
<li>Subject: <input type="text" name="subject" maxlength="100" required> <span class="helptext">100 characters max.</span></li>
<li>Message: <input type="text" name="message" required></li>
<li>Sender: <input type="email" name="sender" required> A valid email address, please.</li>
<li>Cc myself: <input type="checkbox" name="cc_myself"></li>
>>> print(f.as_p())
<p>Subject: <input type="text" name="subject" maxlength="100" required> <span class="helptext">100 characters max.</span></p>
<p>Message: <input type="text" name="message" required></p>
<p>Sender: <input type="email" name="sender" required> A valid email address, please.</p>
<p>Cc myself: <input type="checkbox" name="cc_myself"></p>
error_messages
- Field.error_messages
error_messages
引数を使用すると、フィールドで発生するデフォルトのメッセージを上書きできます。 オーバーライドするエラーメッセージに一致するキーを使用して辞書を渡します。 たとえば、デフォルトのエラーメッセージは次のとおりです。
>>> from django import forms
>>> generic = forms.CharField()
>>> generic.clean('')
Traceback (most recent call last):
...
ValidationError: ['This field is required.']
そして、ここにカスタムエラーメッセージがあります:
>>> name = forms.CharField(error_messages={'required': 'Please enter your name'})
>>> name.clean('')
Traceback (most recent call last):
...
ValidationError: ['Please enter your name']
以下の組み込みフィールドクラスセクションでは、各Field
が使用するエラーメッセージキーを定義します。
validators
- Field.validators
validators
引数を使用すると、このフィールドの検証関数のリストを提供できます。
詳細については、バリデーターのドキュメントを参照してください。
localize
- Field.localize
localize
引数は、フォームデータ入力とレンダリングされた出力のローカリゼーションを可能にします。
詳細については、形式のローカリゼーションのドキュメントを参照してください。
disabled
- Field.disabled
disabled
ブール引数をTrue
に設定すると、disabled
HTML属性を使用してフォームフィールドが無効になり、ユーザーが編集できないようになります。 ユーザーがサーバーに送信されたフィールドの値を改ざんした場合でも、フォームの初期データの値を優先して無視されます。
フィールドデータが変更されたかどうかを確認する
has_changed()
- Field.has_changed()
has_changed()
メソッドは、フィールド値が初期値から変更されたかどうかを判別するために使用されます。 True
またはFalse
を返します。
詳細については、 Form.has_changed()のドキュメントを参照してください。
組み込みのFieldクラス
当然、forms
ライブラリには、一般的な検証ニーズを表すField
クラスのセットが付属しています。 このセクションでは、各組み込みフィールドについて説明します。
フィールドごとに、widget
を指定しない場合に使用されるデフォルトのウィジェットについて説明します。 空の値を指定したときに返される値も指定します(その意味を理解するには、上記のrequired
のセクションを参照してください)。
BooleanField
- class BooleanField(**kwargs)
デフォルトのウィジェット: CheckboxInput
空の値:
False
正規化:Python
True
またはFalse
値。値が
True
であることを検証します(例: フィールドにrequired=True
がある場合、チェックボックスがオンになります。エラーメッセージキー:
required
ノート
すべての
Field
サブクラスにはデフォルトでrequired=True
があるため、ここでの検証条件は重要です。True
またはFalse
のいずれかであるブール値をフォームに含める場合(例: チェックボックスがオンまたはオフの場合)、BooleanField
を作成するときに、required=False
を忘れずに渡す必要があります。
CharField
- class CharField(**kwargs)
デフォルトのウィジェット: TextInput
空の値: empty_value として指定したもの。
正規化:文字列。
max_length
およびmin_length
が指定されている場合は、 MaxLengthValidator および MinLengthValidator を使用します。 それ以外の場合、すべての入力が有効です。エラーメッセージキー:
required
、max_length
、min_length
検証用の3つのオプションの引数があります。
- max_length
- min_length
指定されている場合、これらの引数は、文字列が最大で、または少なくとも指定された長さであることを保証します。
- strip
True
(デフォルト)の場合、値の先頭と末尾の空白が削除されます。
- empty_value
「空」を表すために使用する値。 デフォルトは空の文字列です。
ChoiceField
- class ChoiceField(**kwargs)
デフォルトのウィジェット:選択
空の値:
(空の文字列)
正規化:文字列。
指定された値が選択肢のリストに存在することを検証します。
エラーメッセージキー:
required
、invalid_choice
invalid_choice
エラーメッセージには、%(value)s
が含まれている場合があります。これは、選択した選択肢に置き換えられます。1つの追加の引数を取ります:
- choices
このフィールドの選択肢として使用する2タプルの iterable 、またはそのようなiterableを返すcallableのいずれか。 この引数は、モデルフィールドの
choices
引数と同じ形式を受け入れます。 詳細については、選択肢に関するモデルフィールドリファレンスドキュメントを参照してください。 引数が呼び出し可能である場合、フィールドのフォームが初期化されるたびに評価されます。 デフォルトは空のリストです。
TypedChoiceField
- class TypedChoiceField(**kwargs)
ChoiceField と同じですが、 TypedChoiceField が coerce と empty_value の2つの追加引数を取る点が異なります。
デフォルトのウィジェット:選択
空の値: empty_value として指定したもの。
次のように正規化します。 coerce 引数によって提供されるタイプの値。
指定された値が選択肢のリストに存在し、強制できることを検証します。
エラーメッセージキー:
required
、invalid_choice
追加の引数を取ります:
- coerce
1つの引数を取り、強制値を返す関数。 例としては、組み込みの
int
、float
、bool
などのタイプがあります。 デフォルトは恒等関数です。 強制は入力検証後に発生するため、choices
に存在しない値に強制することが可能であることに注意してください。
- empty_value
「空」を表すために使用する値。 デフォルトは空の文字列です。
None
はここでのもう1つの一般的な選択です。 この値は、coerce
引数で指定された関数によって強制されないことに注意してください。したがって、それに応じて選択してください。
DateField
- class DateField(**kwargs)
デフォルトのウィジェット: DateInput
空の値:
None
正規化:Python
datetime.date
オブジェクト。指定された値が
datetime.date
、datetime.datetime
、または特定の日付形式でフォーマットされた文字列であることを検証します。エラーメッセージキー:
required
、invalid
オプションの引数を1つ取ります。
- input_formats
文字列を有効な
datetime.date
オブジェクトに変換するために使用される形式のリスト。
input_formats
引数が指定されていない場合、デフォルトの入力形式は次のとおりです。['%Y-%m-%d', # '2006-10-25' '%m/%d/%Y', # '10/25/2006' '%m/%d/%y'] # '10/25/06'
さらに、指定した場合 :setting: `USE_L10N = False ` 設定では、以下もデフォルトの入力形式に含まれます。
['%b %d %Y', # 'Oct 25 2006' '%b %d, %Y', # 'Oct 25, 2006' '%d %b %Y', # '25 Oct 2006' '%d %b, %Y', # '25 Oct, 2006' '%B %d %Y', # 'October 25 2006' '%B %d, %Y', # 'October 25, 2006' '%d %B %Y', # '25 October 2006' '%d %B, %Y'] # '25 October, 2006'
フォーマットのローカリゼーションも参照してください。
DateTimeField
- class DateTimeField(**kwargs)
デフォルトのウィジェット: DateTimeInput
空の値:
None
正規化:Python
datetime.datetime
オブジェクト。指定された値が
datetime.datetime
、datetime.date
、または特定の日時形式でフォーマットされた文字列であることを検証します。エラーメッセージキー:
required
、invalid
オプションの引数を1つ取ります。
- input_formats
文字列を有効な
datetime.datetime
オブジェクトに変換するために使用される形式のリスト。
input_formats
引数が指定されていない場合、デフォルトの入力形式は次のとおりです。['%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59' '%Y-%m-%d %H:%M', # '2006-10-25 14:30' '%Y-%m-%d', # '2006-10-25' '%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59' '%m/%d/%Y %H:%M', # '10/25/2006 14:30' '%m/%d/%Y', # '10/25/2006' '%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59' '%m/%d/%y %H:%M', # '10/25/06 14:30' '%m/%d/%y'] # '10/25/06'
フォーマットのローカリゼーションも参照してください。
DecimalField
- class DecimalField(**kwargs)
デフォルトウィジェット: Field.localize が
False
の場合は NumberInput 、それ以外の場合は TextInput 。空の値:
None
正規化:Python
decimal
。指定された値が10進数であることを検証します。
max_value
およびmin_value
が指定されている場合は、 MaxValueValidator および MinValueValidator を使用します。 先頭と末尾の空白は無視されます。エラーメッセージキー:
required
、invalid
、max_value
、min_value
、max_digits
、max_decimal_places
、 [ X90X]
max_value
およびmin_value
エラーメッセージには%(limit_value)s
が含まれている場合があり、適切な制限で置き換えられます。 同様に、max_digits
、max_decimal_places
、およびmax_whole_digits
のエラーメッセージには、%(max)s
が含まれている場合があります。4つのオプションの引数を取ります。
- max_value
- min_value
これらは、フィールドで許可される値の範囲を制御し、
decimal.Decimal
値として指定する必要があります。
- max_digits
値で許可される最大桁数(小数点の前の桁と小数点の後の桁、先行ゼロは削除されます)。
- decimal_places
許可される小数点以下の最大桁数。
DurationField
- class DurationField(**kwargs)
デフォルトのウィジェット: TextInput
空の値:
None
正規化:Python
timedelta
。指定された値が
timedelta
に変換できる文字列であることを検証します。 値はdatetime.timedelta.min
とdatetime.timedelta.max
の間でなければなりません。エラーメッセージキー:
required
、invalid
、overflow
。
parse_duration()が理解できるすべての形式を受け入れます。
EmailField
- class EmailField(**kwargs)
デフォルトのウィジェット: EmailInput
空の値:
(空の文字列)
正規化:文字列。
EmailValidator を使用して、適度に複雑な正規表現を使用して、指定された値が有効な電子メールアドレスであることを検証します。
エラーメッセージキー:
required
、invalid
検証用の2つのオプションの引数、
max_length
とmin_length
があります。 指定されている場合、これらの引数は、文字列が最大で、または少なくとも指定された長さであることを保証します。
FileField
- class FileField(**kwargs)
デフォルトのウィジェット: ClearableFileInput
空の値:
None
正規化:ファイルの内容とファイル名を単一のオブジェクトにラップする
UploadedFile
オブジェクト。空でないファイルデータがフォームにバインドされていることを検証できます。
エラーメッセージキー:
required
、invalid
、missing
、empty
、max_length
検証用の2つのオプションの引数、
max_length
とallow_empty_file
があります。 提供されている場合、これらはファイル名が最大で指定された長さであることを保証し、ファイルの内容が空であっても検証が成功することを保証します。UploadedFile
オブジェクトの詳細については、ファイルアップロードのドキュメントを参照してください。フォームで
FileField
を使用する場合は、ファイルデータをフォームにバインドすることも忘れないでください。max_length
エラーは、ファイル名の長さを示します。 そのキーのエラーメッセージで、%(max)d
はファイル名の最大長に置き換えられ、%(length)d
は現在のファイル名の長さに置き換えられます。
FilePathField
- class FilePathField(**kwargs)
デフォルトのウィジェット:選択
空の値:
(空の文字列)
正規化:文字列。
選択した選択肢が選択肢のリストに存在することを検証します。
エラーメッセージキー:
required
、invalid_choice
このフィールドでは、特定のディレクトリ内のファイルから選択できます。 5つの追加の引数が必要です。
path
のみが必要です。- path
内容を一覧表示するディレクトリへの絶対パス。 このディレクトリが存在する必要があります。
- recursive
False
(デフォルト)の場合、path
の直接コンテンツのみが選択肢として提供されます。True
の場合、ディレクトリは再帰的に降順になり、すべての子孫が選択肢として一覧表示されます。
- match
正規表現パターン。 この式に一致する名前のファイルのみが選択肢として許可されます。
- allow_files
オプション。
True
またはFalse
のいずれか。 デフォルトはTrue
です。 指定した場所にあるファイルを含めるかどうかを指定します。 これまたは allow_folders はTrue
である必要があります。
- allow_folders
オプション。
True
またはFalse
のいずれか。 デフォルトはFalse
です。 指定した場所のフォルダーを含めるかどうかを指定します。 これまたは allow_files はTrue
である必要があります。
FloatField
- class FloatField(**kwargs)
デフォルトウィジェット: Field.localize が
False
の場合は NumberInput 、それ以外の場合は TextInput 。空の値:
None
正規化:Python浮動小数点。
指定された値がfloatであることを検証します。
max_value
およびmin_value
が指定されている場合は、 MaxValueValidator および MinValueValidator を使用します。 Pythonのfloat()
関数のように、先頭と末尾の空白が許可されます。エラーメッセージキー:
required
、invalid
、max_value
、min_value
検証には、
max_value
とmin_value
の2つのオプションの引数を取ります。 これらは、フィールドで許可される値の範囲を制御します。
ImageField
- class ImageField(**kwargs)
デフォルトのウィジェット: ClearableFileInput
空の値:
None
正規化:ファイルの内容とファイル名を単一のオブジェクトにラップする
UploadedFile
オブジェクト。ファイルデータがフォームにバインドされていることを検証します。 また、 FileExtensionValidator を使用して、ファイル拡張子がPillowでサポートされていることを検証します。
エラーメッセージキー:
required
、invalid
、missing
、empty
、invalid_image
ImageField
を使用するには、使用する画像形式をサポートする Pillow がインストールされている必要があります。 画像のアップロード時にcorrupt image
エラーが発生した場合は、通常、Pillowがその形式を理解していないことを意味します。 これを修正するには、適切なライブラリをインストールして、Pillowを再インストールします。フォームで
ImageField
を使用する場合は、ファイルデータをフォームにバインドすることも忘れないでください。フィールドがクリーンアップおよび検証された後、
UploadedFile
オブジェクトには、ファイルが有効なイメージであるかどうかを確認するために使用されるピロー Image インスタンスを含む追加のimage
属性があります。 Pillowは、画像を検証した後、基になるファイル記述子を閉じるため、format
、height
、width
などの非画像データ属性を使用できますが、getdata()
やgetpixel()
などの基になる画像データは、ファイルを再度開かないと使用できません。 例えば:>>> from PIL import Image >>> from django import forms >>> from django.core.files.uploadedfile import SimpleUploadedFile >>> class ImageForm(forms.Form): ... img = forms.ImageField() >>> file_data = {'img': SimpleUploadedFile('test.png', <file data>)} >>> form = ImageForm({}, file_data) # Pillow closes the underlying file descriptor. >>> form.is_valid() True >>> image_field = form.cleaned_data['img'] >>> image_field.image <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=191x287 at 0x7F5985045C18> >>> image_field.image.width 191 >>> image_field.image.height 287 >>> image_field.image.format 'PNG' >>> image_field.image.getdata() # Raises AttributeError: 'NoneType' object has no attribute 'seek'. >>> image = Image.open(image_field) >>> image.getdata() <ImagingCore object at 0x7f5984f874b0>
さらに、
UploadedFile.content_type
は、Pillowが判断できる場合は画像のコンテンツタイプで更新され、それ以外の場合はNone
に設定されます。
IntegerField
- class IntegerField(**kwargs)
デフォルトウィジェット: Field.localize が
False
の場合は NumberInput 、それ以外の場合は TextInput 。空の値:
None
正規化:Python整数。
指定された値が整数であることを検証します。
max_value
およびmin_value
が指定されている場合は、 MaxValueValidator および MinValueValidator を使用します。 Pythonのint()
関数のように、先頭と末尾の空白が許可されます。エラーメッセージキー:
required
、invalid
、max_value
、min_value
max_value
およびmin_value
エラーメッセージには%(limit_value)s
が含まれている場合があり、適切な制限で置き換えられます。検証のために2つのオプションの引数を取ります。
- max_value
- min_value
これらは、フィールドで許可される値の範囲を制御します。
GenericIPAddressField
- class GenericIPAddressField(**kwargs)
IPv4またはIPv6アドレスのいずれかを含むフィールド。
デフォルトのウィジェット: TextInput
空の値:
(空の文字列)
正規化:文字列。 IPv6アドレスは、以下のように正規化されています。
指定された値が有効なIPアドレスであることを検証します。
エラーメッセージキー:
required
、invalid
IPv6アドレスの正規化は、 RFC 4291#section-2.2 セクション2.2に従います。これには、
::ffff:192.0.2.0
などのセクションの段落3で提案されているIPv4形式の使用も含まれます。 たとえば、2001:0::0:01
は2001::1
に正規化され、::ffff:0a0a:0a0a
は::ffff:10.10.10.10
に正規化されます。 すべての文字は小文字に変換されます。2つのオプションの引数を取ります。
- protocol
有効な入力を指定されたプロトコルに制限します。 受け入れられる値は、
both
(デフォルト)、IPv4
、またはIPv6
です。 マッチングでは大文字と小文字は区別されません。
- unpack_ipv4
::ffff:192.0.2.1
のようなIPv4マップアドレスを解凍します。 このオプションを有効にすると、そのアドレスは192.0.2.1
に解凍されます。 デフォルトは無効です。protocol
が'both'
に設定されている場合にのみ使用できます。
MultipleChoiceField
- class MultipleChoiceField(**kwargs)
デフォルトのウィジェット: SelectMultiple
空の値:
[]
(空のリスト)正規化:文字列のリスト。
指定された値のリスト内のすべての値が選択肢のリストに存在することを検証します。
エラーメッセージキー:
required
、invalid_choice
、invalid_list
invalid_choice
エラーメッセージには、%(value)s
が含まれている場合があります。これは、選択した選択肢に置き換えられます。ChoiceField と同様に、1つの追加の必須引数
choices
を取ります。
TypedMultipleChoiceField
- class TypedMultipleChoiceField(**kwargs)
MultipleChoiceField と同じですが、 TypedMultipleChoiceField が
coerce
とempty_value
の2つの追加引数を取る点が異なります。デフォルトのウィジェット: SelectMultiple
空の値:
empty_value
として指定したもの正規化:
coerce
引数によって提供されるタイプの値のリスト。指定された値が選択肢のリストに存在し、強制できることを検証します。
エラーメッセージキー:
required
、invalid_choice
invalid_choice
エラーメッセージには、%(value)s
が含まれている場合があります。これは、選択した選択肢に置き換えられます。TypedChoiceField と同様に、
coerce
とempty_value
の2つの追加引数を取ります。
NullBooleanField
- class NullBooleanField(**kwargs)
- ;* デフォルトのウィジェット: NullBooleanSelect
- 空の値:
None
- 正規化:Python
True
、False
、またはNone
の値。 - 何も検証しません(つまり、
ValidationError
を発生させることはありません)。
- 空の値:
RegexField
- class RegexField(**kwargs)
デフォルトのウィジェット: TextInput
空の値:
(空の文字列)
正規化:文字列。
RegexValidator を使用して、指定された値が特定の正規表現に一致することを検証します。
エラーメッセージキー:
required
、invalid
1つの必須の引数を取ります:
- regex
文字列またはコンパイルされた正規表現オブジェクトとして指定された正規表現。
max_length
、min_length
、およびstrip
も使用できます。これらは、 CharField の場合と同じように機能します。- strip
デフォルトは
False
です。 有効にすると、正規表現の検証の前にストリッピングが適用されます。
SlugField
- class SlugField(**kwargs)
デフォルトのウィジェット: TextInput
空の値:
(空の文字列)
正規化:文字列。
validate_slug または validate_unicode_slug を使用して、指定された値に文字、数字、アンダースコア、およびハイフンのみが含まれていることを検証します。
エラーメッセージ:
required
、invalid
このフィールドは、モデル SlugField をフォームで表すために使用することを目的としています。
オプションのパラメータを取ります:
- allow_unicode
ASCII文字に加えてUnicode文字を受け入れるようにフィールドに指示するブール値。 デフォルトは
False
です。
TimeField
- class TimeField(**kwargs)
デフォルトのウィジェット: TimeInput
空の値:
None
正規化:Python
datetime.time
オブジェクト。指定された値が
datetime.time
または特定の時間形式でフォーマットされた文字列であることを検証します。エラーメッセージキー:
required
、invalid
オプションの引数を1つ取ります。
- input_formats
文字列を有効な
datetime.time
オブジェクトに変換するために使用される形式のリスト。
input_formats
引数が指定されていない場合、デフォルトの入力形式は次のとおりです。'%H:%M:%S', # '14:30:59' '%H:%M', # '14:30'
URLField
- class URLField(**kwargs)
デフォルトのウィジェット: URLInput
空の値:
(空の文字列)
正規化:文字列。
URLValidator を使用して、指定された値が有効なURLであることを検証します。
エラーメッセージキー:
required
、invalid
次のオプションの引数を取ります。
- max_length
- min_length
これらは
CharField.max_length
およびCharField.min_length
と同じです。
UUIDField
- class UUIDField(**kwargs)
デフォルトのウィジェット: TextInput
空の値:
(空の文字列)
正規化:
UUID
オブジェクト。エラーメッセージキー:
required
、invalid
このフィールドは、
UUID
コンストラクターのhex
引数として受け入れられるすべての文字列形式を受け入れます。
やや複雑なビルトインFieldクラス
ComboField
- class ComboField(**kwargs)
デフォルトのウィジェット: TextInput
空の値:
(空の文字列)
正規化:文字列。
ComboField
への引数として指定された各フィールドに対して指定された値を検証します。エラーメッセージキー:
required
、invalid
必要な引数を1つ追加します。
- fields
フィールドの値を検証するために使用する必要があるフィールドのリスト(提供された順序で)。
>>> from django.forms import ComboField >>> f = ComboField(fields=[CharField(max_length=20), EmailField()]) >>> f.clean('test@example.com') 'test@example.com' >>> f.clean('longemailaddress@example.com') Traceback (most recent call last): ... ValidationError: ['Ensure this value has at most 20 characters (it has 28).']
MultiValueField
- class MultiValueField(fields=(), **kwargs)
デフォルトのウィジェット: TextInput
空の値:
(空の文字列)
正規化:サブクラスの
compress
メソッドによって返される型。MultiValueField
への引数として指定された各フィールドに対して指定された値を検証します。エラーメッセージキー:
required
、invalid
、incomplete
一緒に単一の値を生成する複数のフィールドのロジックを集約します。
このフィールドは抽象的であり、サブクラス化する必要があります。 単一値フィールドとは対照的に、 MultiValueField のサブクラスは、 clean()を実装してはならず、代わりに compress()を実装する必要があります。
必要な引数を1つ追加します。
- fields
値がクリーンアップされ、その後1つの値に結合されるフィールドのタプル。 フィールドの各値は、
fields
の対応するフィールドによってクリーンアップされます。最初の値は最初のフィールドによってクリーンアップされ、2番目の値は2番目のフィールドによってクリーンアップされます。 すべてのフィールドがクリーンアップされると、クリーンな値のリストが compress()によって単一の値に結合されます。
また、いくつかのオプションの引数を取ります。
- require_all_fields
デフォルトは
True
です。この場合、どのフィールドにも値が指定されていないと、required
検証エラーが発生します。False
に設定すると、個々のフィールドの Field.required 属性をFalse
に設定して、フィールドをオプションにすることができます。 必須フィールドに値が指定されていない場合、incomplete
検証エラーが発生します。デフォルトの
incomplete
エラーメッセージは、 MultiValueField サブクラスで定義できます。または、個々のフィールドごとに異なるメッセージを定義できます。 例えば:from django.core.validators import RegexValidator class PhoneField(MultiValueField): def __init__(self, **kwargs): # Define one message for all fields. error_messages = { 'incomplete': 'Enter a country calling code and a phone number.', } # Or define a different message for each field. fields = ( CharField( error_messages={'incomplete': 'Enter a country calling code.'}, validators=[ RegexValidator(r'^[0-9]+$', 'Enter a valid country calling code.'), ], ), CharField( error_messages={'incomplete': 'Enter a phone number.'}, validators=[RegexValidator(r'^[0-9]+$', 'Enter a valid phone number.')], ), CharField( validators=[RegexValidator(r'^[0-9]+$', 'Enter a valid extension.')], required=False, ), ) super().__init__( error_messages=error_messages, fields=fields, require_all_fields=False, **kwargs )
- widget
django.forms.MultiWidget のサブクラスである必要があります。 デフォルト値は TextInput ですが、この場合はおそらくあまり役に立ちません。
- compress(data_list)
有効な値のリストを取得し、それらの値の「圧縮」バージョンを単一の値で返します。 たとえば、 SplitDateTimeField は、時間フィールドと日付フィールドを組み合わせて
datetime
オブジェクトにするサブクラスです。このメソッドは、サブクラスに実装する必要があります。
SplitDateTimeField
- class SplitDateTimeField(**kwargs)
デフォルトのウィジェット: SplitDateTimeWidget
空の値:
None
正規化:Python
datetime.datetime
オブジェクト。指定された値が
datetime.datetime
または特定の日時形式でフォーマットされた文字列であることを検証します。エラーメッセージキー:
required
、invalid
、invalid_date
、invalid_time
2つのオプションの引数を取ります。
- input_date_formats
文字列を有効な
datetime.date
オブジェクトに変換するために使用される形式のリスト。
input_date_formats
引数が指定されていない場合、 DateField のデフォルトの入力形式が使用されます。- input_time_formats
文字列を有効な
datetime.time
オブジェクトに変換するために使用される形式のリスト。
input_time_formats
引数が指定されていない場合、 TimeField のデフォルトの入力形式が使用されます。
関係を処理するフィールド
モデル間の関係を表すために、 ModelChoiceField と ModelMultipleChoiceField の2つのフィールドを使用できます。 これらのフィールドは両方とも、フィールドの選択肢を作成するために使用される単一のqueryset
パラメーターを必要とします。 フォームの検証時に、これらのフィールドは1つのモデルオブジェクト(ModelChoiceField
の場合)または複数のモデルオブジェクト(ModelMultipleChoiceField
の場合)をのcleaned_data
ディクショナリに配置します。フォーム。
より複雑な使用法の場合は、フォームフィールドを宣言するときにqueryset=None
を指定してから、フォームの__init__()
メソッドにqueryset
を入力できます。
class FooMultipleChoiceForm(forms.Form):
foo_select = forms.ModelMultipleChoiceField(queryset=None)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['foo_select'].queryset = ...
ModelChoiceField
- class ModelChoiceField(**kwargs)
デフォルトのウィジェット:選択
空の値:
None
正規化:モデルインスタンス。
指定されたIDがクエリセットに存在することを検証します。
エラーメッセージキー:
required
、invalid_choice
外部キーを表すのに適した単一のモデルオブジェクトを選択できます。
ModelChoiceField
のデフォルトのウィジェットは、エントリの数が増えると実用的ではなくなることに注意してください。 100を超えるアイテムには使用しないでください。単一の引数が必要です:
- queryset
フィールドの選択肢が導き出され、ユーザーの選択を検証するために使用されるモデルオブジェクトの
QuerySet
。 フォームがレンダリングされるときに評価されます。
ModelChoiceField
も、2つのオプションの引数を取ります。- empty_label
デフォルトでは、
ModelChoiceField
で使用される<select>
ウィジェットのリストの上部に空の選択肢があります。 このラベルのテキスト(デフォルトでは"---------"
)をempty_label
属性で変更するか、empty_label
をNone
:# A custom empty label field1 = forms.ModelChoiceField(queryset=..., empty_label="(Nothing)") # No empty label field2 = forms.ModelChoiceField(queryset=..., empty_label=None)
ModelChoiceField
が必要で、デフォルトの初期値がある場合、(empty_label
の値に関係なく)空の選択肢は作成されないことに注意してください。
- to_field_name
このオプションの引数は、フィールドのウィジェットの選択肢の値として使用するフィールドを指定するために使用されます。 モデルの一意のフィールドであることを確認してください。そうでない場合、選択した値が複数のオブジェクトと一致する可能性があります。 デフォルトでは
None
に設定されており、この場合、各オブジェクトの主キーが使用されます。 例えば:# No custom to_field_name field1 = forms.ModelChoiceField(queryset=...)
生成されます:
<select id="id_field1" name="field1"> <option value="obj1.pk">Object1</option> <option value="obj2.pk">Object2</option> ... </select>
と:
# to_field_name provided field2 = forms.ModelChoiceField(queryset=..., to_field_name="name")
生成されます:
<select id="id_field2" name="field2"> <option value="obj1.name">Object1</option> <option value="obj2.name">Object2</option> ... </select>
モデルの
__str__()
メソッドが呼び出され、フィールドの選択で使用するオブジェクトの文字列表現が生成されます。 カスタマイズされた表現を提供するには、ModelChoiceField
をサブクラス化し、label_from_instance
をオーバーライドします。 このメソッドはモデルオブジェクトを受け取り、それを表すのに適した文字列を返す必要があります。 例えば:from django.forms import ModelChoiceField class MyModelChoiceField(ModelChoiceField): def label_from_instance(self, obj): return "My Object #%i" % obj.id
ModelMultipleChoiceField
- class ModelMultipleChoiceField(**kwargs)
デフォルトのウィジェット: SelectMultiple
空の値:空の
QuerySet
(self.queryset.none())正規化:モデルインスタンスの
QuerySet
。指定された値のリスト内のすべてのIDがクエリセットに存在することを検証します。
エラーメッセージキー:
required
、list
、invalid_choice
、invalid_pk_value
invalid_choice
メッセージには%(value)s
が含まれ、invalid_pk_value
メッセージには%(pk)s
が含まれる場合があり、これらは適切な値に置き換えられます。多対多の関係を表すのに適した、1つ以上のモデルオブジェクトの選択を可能にします。 ModelChoiceField と同様に、
label_from_instance
を使用してオブジェクト表現をカスタマイズできます。単一の引数が必要です:
- queryset
ModelChoiceField.queryset と同じです。
オプションの引数を1つ取ります。
- to_field_name
カスタムフィールドの作成
組み込みのField
クラスがニーズを満たさない場合は、カスタムField
クラスを簡単に作成できます。 これを行うには、django.forms.Field
のサブクラスを作成するだけです。 その唯一の要件は、clean()
メソッドを実装し、その__init__()
メソッドが上記のコア引数(required
、label
、 [ X162X]、widget
、help_text
)。
get_bound_field()をオーバーライドして、フィールドへのアクセス方法をカスタマイズすることもできます。