Spec-Zone.ru › Django 5.2

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

Spec-Zone.ru

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