Поля и виджеты, специфичные для 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, то значения 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 -
Поле, которое принимает данные, закодированные в формате 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.1/ref/contrib/postgres/forms/