Поля и виджеты, специфичные для 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и преобразует его ввод в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, и возвращает кортеж, представляющий нижнюю и верхнюю границы.
-
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/4.1/ref/contrib/postgres/forms/