Поля и компоненты форм PostgreSQL

Все эти поля и компоненты доступны в модуле django.contrib.postgres.forms .

Поля

SimpleArrayField

classSimpleArrayField ( 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

classSplitArrayField ( base_field , size , remove_trailing_nulls = False )

Это поле загружает таблицы, воспроизводя базовое поле определенное количество раз.

base_field

Это обязательный параметр. Он определяет повторяющееся поле формы.

size

Сколько раз будет использоваться базовое поле.

remove_trailing_nulls

По умолчанию это значение 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

класс HStoreField

Поле, которое принимает данные в кодировке JSON для поля HStoreField . Он переводит все значения (кроме null) в строки. В HTML он представлен тегом <textarea> .

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

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

Заметка

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

JSONField

класс JSONField

Поле, которое принимает данные в кодировке JSON для файла JSONField . Он представлен в виде HTML <textarea> .

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

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

Не рекомендуется с версии 3.1: django.forms.JSONField Вместо этого используйте .

Поля интервалов

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

IntegerRangeField

класс IntegerRangeField

На основе IntegerField и переводит введенное значение в интервал NumericRange . Поле формы по умолчанию для IntegerRangeField и BigIntegerRangeField .

DecimalRangeField

класс DecimalRangeField

На основе DecimalField и переводит введенное значение в интервал NumericRange . Поле формы по умолчанию для DecimalRangeField .

DateTimeRangeField

класс DateTimeRangeField

На основе DateTimeField и переводит введенное значение в интервал DateTimeTZRange . Поле формы по умолчанию для DateTimeRangeField .

DateRangeField

класс DateRangeField

На основе DateField и переводит введенное значение в интервал DateRange . Поле формы по умолчанию для DateRangeField .

Компоненты формы («виджеты»)

RangeWidget

classRangeWidget ( base_widget , attrs = None )

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

RangeWidget требуется обязательный параметр:

base_widget

Интервал, RangeWidget состоящий из двоичного кортежа base_widget .

decompress( значение )

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

Copyright ©2020 All rights reserved