Spec-Zone.ru › Django 6.0

Специальные поля и виджеты форм 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

RangeWidget состоит из 2-элементного кортежа значений base_widget.

decompress(value)

Принимает одно «сжатое» значение поля, например DateRangeField, и возвращает кортеж, представляющий нижнюю и верхнюю границы.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/ref/contrib/postgres/forms/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API