Поля и виджеты, специфичные для 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. Когда 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. Он преобразует все значения (кроме нулей) в строки. Он представлен в виде 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

A RangeWidgetсостоит из двух элементов base_widget.

decompress( значение )

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

Copyright ©2021 All rights reserved