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