Поля и виджеты форм, специфичные для 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]]}
Примечание
Поле не поддерживает экранирование разделителя, поэтому будьте осторожны в случаях, когда разделитель является допустимым символом в базовом поле. Разделитель не обязательно должен быть только одним символом.
-
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_nulls-True, то нулевые значения допускаются только в конце и будут вычеркнуты.Некоторые примеры:
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[исходный код]¶ Поле, которое принимает данные в кодировке JSON для
HStoreField. Оно преобразует все значения (кроме нулей) в строки. Оно представлено HTML<textarea>.Удобные для пользователя формы
HStoreFieldв большинстве случаев не особенно удобен для пользователя, однако это полезный способ форматирования данных из виджета на стороне клиента для отправки на сервер.Примечание
В некоторых случаях может быть полезно потребовать или ограничить ключи, которые действительны для данного поля. Это можно сделать с помощью функции
KeysValidator.
Поля диапазона¶
Все поля этой группы имеют схожую функциональность для приема данных о диапазоне. Они основаны на MultiValueField. Они рассматривают одно опущенное значение как неограниченный диапазон. Они также проверяют, что нижняя граница не больше верхней. Все эти поля используют RangeWidget.
IntegerRangeField¶
-
class
IntegerRangeField[исходный код]¶ Based on
IntegerFieldand translates its input intodjango.db.backends.postgresql.psycopg_any.NumericRange. Default forIntegerRangeFieldandBigIntegerRangeField.
DecimalRangeField¶
-
class
DecimalRangeField[исходный код]¶ Based on
DecimalFieldand translates its input intodjango.db.backends.postgresql.psycopg_any.NumericRange. Default forDecimalRangeField.
DateTimeRangeField¶
-
class
DateTimeRangeField[исходный код]¶ Based on
DateTimeFieldand translates its input intodjango.db.backends.postgresql.psycopg_any.DateTimeTZRange. Default forDateTimeRangeField.
DateRangeField¶
-
class
DateRangeField[исходный код]¶ Based on
DateFieldand translates its input intodjango.db.backends.postgresql.psycopg_any.DateRange. Default forDateRangeField.
Виджеты¶
RangeWidget¶
-
class
RangeWidget(base_widget, attrs=None)[исходный код]¶ Виджет, используемый всеми полями диапазона. Основан на
MultiWidget.RangeWidgetимеет один обязательный аргумент:-
base_widget¶ RangeWidgetвключает в себя 2 кортежаbase_widget.
-
decompress(value)[исходный код]¶ Принимает одно «сжатое» значение поля, например,
DateRangeField, и возвращает кортеж, представляющий нижнюю и верхнюю границы.
-