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