• 3.1
  • 3.2
  • 6.1
  • Версия документации: 5.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, то значения 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. Он преобразует все значения (кроме нулей) в строки. Он представлен HTML <textarea>.

Удобные формы

HStoreField в большинстве случаев не особенно удобен для пользователя, однако это полезный способ форматирования данных из виджета на стороне клиента для отправки на сервер.

Примечание

В некоторых случаях может быть полезно потребовать или ограничить ключи, действительные для данного поля. Это можно сделать с помощью KeysValidator.

Поля диапазона

Все поля этой группы имеют схожие функциональные возможности для приема данных диапазона. Они основаны на MultiValueField. Они рассматривают одно пропущенное значение как неограниченный диапазон. Они также проверяют, что нижняя граница не превышает верхнюю. Во всех этих полях используется RangeWidget.

IntegerRangeField

class IntegerRangeField

Основан на IntegerField и преобразует его входные данные в django.db.backends.postgresql.psycopg_any.NumericRange. По умолчанию для IntegerRangeField и BigIntegerRangeField.

Десятичноеполедиапазона

class DecimalRangeField

Основан на DecimalField и преобразует его входные данные в django.db.backends.postgresql.psycopg_any.NumericRange. По умолчанию для DecimalRangeField.

DateTimeRangeField

class DateTimeRangeField

Основан на DateTimeField и преобразует его входные данные в django.db.backends.postgresql.psycopg_any.DateTimeTZRange. По умолчанию для DateTimeRangeField.

ДатаРангеФилд

class DateRangeField

Основан на DateField и преобразует его входные данные в django.db.backends.postgresql.psycopg_any.DateRange. По умолчанию для DateRangeField.

Виджеты

Диапазонвиджет

class RangeWidget(base_widget, attrs=None)

Виджет, используемый всеми полями диапазона. На основе MultiWidget.

RangeWidget имеет один обязательный аргумент:

base_widget

RangeWidget состоит из двух кортежей base_widget.

decompress(value)

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

Back to Top