Специальные поля и виджеты форм 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. Оно преобразует все значения (кроме null) в строки. Поле представлено HTML-элементом<textarea>.Удобные для пользователя формы
HStoreFieldв большинстве случаев не особенно удобно для пользователя, однако это полезный способ форматировать данные из клиентского виджета для отправки на сервер.Примечание
Иногда бывает полезно задать обязательные ключи или ограничить допустимые ключи для данного поля. Это можно сделать с помощью
KeysValidator.
Поля диапазонов
Все поля этой группы обладают схожей функциональностью для приема данных диапазона. Они основаны на MultiValueField. Они трактуют одно пропущенное значение как неограниченный диапазон. Кроме того, они проверяют, что нижняя граница не больше верхней. Во всех этих полях используется RangeWidget.
IntegerRangeField
-
class IntegerRangeField -
Основано на
IntegerFieldи преобразует введенные данные вdjango.db.backends.postgresql.psycopg_any.NumericRange. Используется по умолчанию дляIntegerRangeFieldиBigIntegerRangeField.
DecimalRangeField
-
class DecimalRangeField -
Основано на
DecimalFieldи преобразует введенные данные вdjango.db.backends.postgresql.psycopg_any.NumericRange. Используется по умолчанию дляDecimalRangeField.
DateTimeRangeField
-
class DateTimeRangeField -
Основано на
DateTimeFieldи преобразует введенные данные вdjango.db.backends.postgresql.psycopg_any.DateTimeTZRange. Используется по умолчанию дляDateTimeRangeField.
DateRangeField
-
class DateRangeField -
Основано на
DateFieldи преобразует введенные данные вdjango.db.backends.postgresql.psycopg_any.DateRange. Используется по умолчанию дляDateRangeField.
Виджеты
RangeWidget
-
class RangeWidget(base_widget, attrs=None) -
Виджет, используемый всеми полями диапазонов. Основан на
MultiWidget.У
RangeWidgetесть один обязательный аргумент:-
base_widget -
RangeWidgetсостоит из 2-элементного кортежа значенийbase_widget.
-
decompress(value) -
Принимает одно «сжатое» значение поля, например
DateRangeField, и возвращает кортеж, представляющий нижнюю и верхнюю границы.
-
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/ref/contrib/postgres/forms/