Поля и виджеты, специфичные для 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
¶
-
класс
HStoreField
¶ Поле, которое принимает данные в кодировке JSON для файла
HStoreField
. Он преобразует все значения (кроме нулей) в строки. Он представлен в виде HTML<textarea>
.Удобные формы
HStoreField
в большинстве случаев не очень удобен для пользователя, однако это полезный способ форматирования данных из клиентского виджета для отправки на сервер.Примечание
В некоторых случаях может быть полезно потребовать или ограничить ключи, действительные для данного поля. Это можно сделать с помощью файла
KeysValidator
.
JSONField
¶
-
класс
JSONField
¶ Поле, которое принимает данные в кодировке JSON для файла
JSONField
. Он представлен в виде HTML<textarea>
.Удобные формы
JSONField
в большинстве случаев не очень удобен для пользователя, однако это полезный способ форматирования данных из клиентского виджета для отправки на сервер.Не рекомендуется с версии 3.1: Используйте
django.forms.JSONField
вместо этого.
Поля диапазона ¶
Эта группа полей имеет схожую функциональность для приема данных диапазона. Они основаны на MultiValueField
. Они рассматривают одно пропущенное значение как неограниченный диапазон. Они также подтверждают, что нижняя граница не больше верхней. Все эти поля используют
RangeWidget
.
IntegerRangeField
¶
-
класс
IntegerRangeField
¶ На основе
IntegerField
и переводит свои входные данные в форматNumericRange
. По умолчанию дляIntegerRangeField
иBigIntegerRangeField
.
DecimalRangeField
¶
-
класс
DecimalRangeField
¶ На основе
DecimalField
и переводит свои входные данные в форматNumericRange
. По умолчанию дляDecimalRangeField
.
DateTimeRangeField
¶
-
класс
DateTimeRangeField
¶ На основе
DateTimeField
и переводит свои входные данные в форматDateTimeTZRange
. По умолчанию дляDateTimeRangeField
.
DateRangeField
¶
-
класс
DateRangeField
¶ На основе
DateField
и переводит свои входные данные в форматDateRange
. По умолчанию дляDateRangeField
.
Виджеты ¶
RangeWidget
¶
-
class
RangeWidget
( base_widget , attrs = None ) ¶ Виджет, используемый всеми полями диапазона. На основе
MultiWidget
.RangeWidget
имеет один обязательный аргумент:-
base_widget
¶ A
RangeWidget
состоит из двух элементовbase_widget
.
-
decompress
( значение ) ¶ Принимает одно «сжатое» значение поля, например a
DateRangeField
, и возвращает кортеж, представляющий нижнюю и верхнюю границы.
-