Поля и виджеты форм, специфичные для 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, то null-значения допускаются только в конце и удаляются.Примеры:
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 -
RangeWidgetсостоит из 2-кортежаbase_widget.
-
decompress(value) -
Принимает одно «скомпрессированное» значение поля, например,
DateRangeField, и возвращает кортеж, представляющий нижнюю и верхнюю границы.
-
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.2/ref/contrib/postgres/forms/