Поля и виджеты, специфичные для 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.
Поля диапазонов
Эта группа полей обладает схожей функциональностью для приема данных диапазонов. Они основаны на MultiValueField. Они обрабатывают одно пропущенное значение как неограниченный диапазон. Они также проверяют, что нижняя граница не больше верхней границы. Все эти поля используют RangeWidget.
IntegerRangeField
-
class IntegerRangeField -
Основан на
IntegerFieldи преобразует его вход вdjango.db.backends.postgresql.psycopg_any.NumericRange. По умолчанию дляIntegerRangeFieldиBigIntegerRangeField.
DecimalRangeField
-
class DecimalRangeField -
Основан на
DecimalFieldи преобразует его вход вdjango.db.backends.postgresql.psycopg_any.NumericRange. По умолчанию дляDecimalRangeField.
DateTimeRangeField
-
class DateTimeRangeField -
Основан на
DateTimeFieldи преобразует его вход вdjango.db.backends.postgresql.psycopg_any.DateTimeTZRange. По умолчанию дляDateTimeRangeField.
DateRangeField
-
class DateRangeField -
Основан на
DateFieldи преобразует его вход вdjango.db.backends.postgresql.psycopg_any.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/4.2/ref/contrib/postgres/forms/