Поля и виджеты форм, специфичные для 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[исходный код]

Базируется на 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, и возвращает кортеж, представляющий нижнюю и верхнюю границы.

Вернуться на верх