Поля и виджеты форм, специфичные для 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
. Оно преобразует все значения (кроме нулей) в строки. Оно представлено HTML<textarea>
.Удобные для пользователя формы
HStoreField
в большинстве случаев не особенно удобен для пользователя, однако это полезный способ форматирования данных из виджета на стороне клиента для отправки на сервер.Примечание
В некоторых случаях может быть полезно потребовать или ограничить ключи, которые действительны для данного поля. Это можно сделать с помощью функции
KeysValidator
.
JSONField
¶
-
class
JSONField
[исходный код]¶ Поле, которое принимает данные в кодировке JSON для
JSONField
. Оно представлено HTML<textarea>
.Удобные для пользователя формы
JSONField
в большинстве случаев не особенно удобен для пользователя, однако это полезный способ форматирования данных из виджета на стороне клиента для отправки на сервер.
Поля диапазона¶
Все поля этой группы имеют схожую функциональность для приема данных о диапазоне. Они основаны на MultiValueField
. Они рассматривают одно опущенное значение как неограниченный диапазон. Они также проверяют, что нижняя граница не больше верхней. Все эти поля используют RangeWidget
.
IntegerRangeField
¶
-
class
IntegerRangeField
[исходный код]¶ Основан на
IntegerField
и переводит его вход вNumericRange
. По умолчанию дляIntegerRangeField
иBigIntegerRangeField
.
DecimalRangeField
¶
-
class
DecimalRangeField
[исходный код]¶ - New in 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
¶ RangeWidget
включает в себя 2 кортежаbase_widget
.
-
decompress
(value)[исходный код]¶ Принимает одно «сжатое» значение поля, например,
DateRangeField
, и возвращает кортеж, представляющий нижнюю и верхнюю границы.
-