Поля и виджеты форм, специфичные для 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
.
Поля диапазона¶
Все поля этой группы имеют схожую функциональность для приема данных о диапазоне. Они основаны на MultiValueField
. Они рассматривают одно опущенное значение как неограниченный диапазон. Они также проверяют, что нижняя граница не больше верхней. Все эти поля используют RangeWidget
.
IntegerRangeField
¶
-
class
IntegerRangeField
[исходный код]¶ Based on
IntegerField
and translates its input intodjango.db.backends.postgresql.psycopg_any.NumericRange
. Default forIntegerRangeField
andBigIntegerRangeField
.
DecimalRangeField
¶
-
class
DecimalRangeField
[исходный код]¶ Based on
DecimalField
and translates its input intodjango.db.backends.postgresql.psycopg_any.NumericRange
. Default forDecimalRangeField
.
DateTimeRangeField
¶
-
class
DateTimeRangeField
[исходный код]¶ Based on
DateTimeField
and translates its input intodjango.db.backends.postgresql.psycopg_any.DateTimeTZRange
. Default forDateTimeRangeField
.
DateRangeField
¶
-
class
DateRangeField
[исходный код]¶ Based on
DateField
and translates its input intodjango.db.backends.postgresql.psycopg_any.DateRange
. Default forDateRangeField
.
Виджеты¶
RangeWidget
¶
-
class
RangeWidget
(base_widget, attrs=None)[исходный код]¶ Виджет, используемый всеми полями диапазона. Основан на
MultiWidget
.RangeWidget
имеет один обязательный аргумент:-
base_widget
¶ RangeWidget
включает в себя 2 кортежаbase_widget
.
-
decompress
(value)[исходный код]¶ Принимает одно «сжатое» значение поля, например,
DateRangeField
, и возвращает кортеж, представляющий нижнюю и верхнюю границы.
-