Поля и виджеты форм, специфичные для 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[исходный код]¶ Основан на
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имеет один обязательный аргумент:-
base_widget¶ RangeWidgetвключает в себя 2 кортежаbase_widget.
-
decompress(value)[исходный код]¶ Принимает одно «сжатое» значение поля, например
DateRangeField, и возвращает кортеж, представляющий нижнюю и верхнюю границы.
-