Поля и виджеты, специфичные для 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/5.0/ref/contrib/postgres/forms/