PostgreSQL固有のフォームフィールドとウィジェット—Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/ref/contrib/postgres/forms
移動先:案内検索

PostgreSQL固有のフォームフィールドとウィジェット

これらのフィールドとウィジェットはすべて、django.contrib.postgres.formsモジュールから利用できます。

田畑

SimpleArrayField

class SimpleArrayField(base_field, delimiter=',', max_length=None, min_length=None)

配列にマップするフィールド。 HTML <input>で表されます。

base_field

これは必須の引数です。

配列の基になるフォームフィールドを指定します。 これはHTMLのレンダリングには使用されませんが、送信されたデータを処理して検証するために使用されます。 例えば:

>>> from django import forms
>>> from django.contrib.postgres.forms import SimpleArrayField

>>> class NumberListForm(forms.Form):
...     numbers = SimpleArrayField(forms.IntegerField())

>>> form = NumberListForm({'numbers': '1,2,3'})
>>> form.is_valid()
True
>>> form.cleaned_data
{'numbers': [1, 2, 3]}

>>> form = NumberListForm({'numbers': '1,2,a'})
>>> form.is_valid()
False
delimiter

これはオプションの引数で、デフォルトはコンマです:,。 この値は、送信されたデータを分割するために使用されます。 多次元データのSimpleArrayFieldを連鎖させることができます。

>>> from django import forms
>>> from django.contrib.postgres.forms import SimpleArrayField

>>> class GridForm(forms.Form):
...     places = SimpleArrayField(SimpleArrayField(IntegerField()), delimiter='|')

>>> form = GridForm({'places': '1,2|2,1|4,3'})
>>> form.is_valid()
True
>>> form.cleaned_data
{'places': [[1, 2], [2, 1], [4, 3]]}

ノート

このフィールドは区切り文字のエスケープをサポートしていないため、区切り文字が基になるフィールドで有効な文字である場合は注意してください。 区切り文字は1文字だけである必要はありません。

max_length

これは、配列が指定された長さを超えていないことを検証するオプションの引数です。

min_length

これは、配列が少なくとも指定された長さに達していることを検証するオプションの引数です。

ユーザーフレンドリーなフォーム

SimpleArrayFieldは、ほとんどの場合、特にユーザーフレンドリーではありませんが、サーバーに送信するためにクライアント側ウィジェットからデータをフォーマットするための便利な方法です。


SplitArrayField

class SplitArrayField(base_field, size, remove_trailing_nulls=False)

このフィールドは、基になるフィールドを一定の回数再生することによって配列を処理します。

base_field

これは必須の引数です。 繰り返すフォームフィールドを指定します。

size

これは、基になるフィールドが使用される固定回数です。

remove_trailing_nulls

デフォルトでは、これはFalseに設定されています。 Falseの場合、繰り返されるフィールドの各値が格納されます。 Trueに設定すると、空白の末尾の値は結果から削除されます。 基になるフィールドにrequired=Trueがあり、remove_trailing_nullsTrueの場合、null値は最後にのみ許可され、削除されます。

いくつかの例:

SplitArrayField(IntegerField(required=True), size=3, remove_trailing_nulls=False)

['1', '2', '3']  # -> [1, 2, 3]
['1', '2', '']  # -> ValidationError - third entry required.
['1', '', '3']  # -> ValidationError - second entry required.
['', '2', '']  # -> ValidationError - first and third entries required.

SplitArrayField(IntegerField(required=False), size=3, remove_trailing_nulls=False)

['1', '2', '3']  # -> [1, 2, 3]
['1', '2', '']  # -> [1, 2, None]
['1', '', '3']  # -> [1, None, 3]
['', '2', '']  # -> [None, 2, None]

SplitArrayField(IntegerField(required=True), size=3, remove_trailing_nulls=True)

['1', '2', '3']  # -> [1, 2, 3]
['1', '2', '']  # -> [1, 2]
['1', '', '3']  # -> ValidationError - second entry required.
['', '2', '']  # -> ValidationError - first entry required.

SplitArrayField(IntegerField(required=False), size=3, remove_trailing_nulls=True)

['1', '2', '3']  # -> [1, 2, 3]
['1', '2', '']  # -> [1, 2]
['1', '', '3']  # -> [1, None, 3]
['', '2', '']  # -> [None, 2]


HStoreField

class HStoreField

HStoreField のJSONエンコードされたデータを受け入れるフィールド。 すべての値(nullを除く)を文字列にキャストします。 HTML <textarea>で表されます。

ユーザーフレンドリーなフォーム

HStoreFieldは、ほとんどの場合、特にユーザーフレンドリーではありませんが、サーバーに送信するためにクライアント側ウィジェットからデータをフォーマットするための便利な方法です。

ノート

特定のフィールドに有効なキーを要求または制限すると便利な場合があります。 これは、 KeysValidator を使用して実行できます。


JSONField

class JSONField

JSONField のJSONエンコードされたデータを受け入れるフィールド。 HTML <textarea>で表されます。

ユーザーフレンドリーなフォーム

JSONFieldは、ほとんどの場合、特にユーザーフレンドリーではありませんが、サーバーに送信するためにクライアント側ウィジェットからデータをフォーマットするための便利な方法です。

バージョン3.1以降非推奨:代わりに django.forms.JSONField を使用してください。


範囲フィールド

このフィールドのグループはすべて、範囲データを受け入れるための同様の機能を共有しています。 それらは MultiValueField に基づいています。 省略された1つの値を無制限の範囲として扱います。 また、下限が上限を超えていないことも検証します。 これらのフィールドはすべて RangeWidget を使用します。

IntegerRangeField

class IntegerRangeField
IntegerField に基づき、その入力をNumericRangeに変換します。 IntegerRangeField および BigIntegerRangeField のデフォルト。


DecimalRangeField

class DecimalRangeField
DecimalField に基づき、その入力をNumericRangeに変換します。 DecimalRangeField のデフォルト。


DateTimeRangeField

class DateTimeRangeField
DateTimeField に基づき、その入力をDateTimeTZRangeに変換します。 DateTimeRangeField のデフォルト。


DateRangeField

class DateRangeField
DateField に基づき、その入力をDateRangeに変換します。 DateRangeField のデフォルト。


ウィジェット

RangeWidget

class RangeWidget(base_widget, attrs=None)

すべての範囲フィールドで使用されるウィジェット。 MultiWidget に基づいています。

RangeWidget には、必須の引数が1つあります。

base_widget

RangeWidget は、base_widgetの2タプルで構成されます。

decompress(value)

DateRangeField など、フィールドの単一の「圧縮された」値を取得し、下限と上限を表すタプルを返します。