PostgreSQL specific form fields and widgets

所有这些字段和小部件都可从django.contrib.postgres.forms模块中获取。

SimpleArrayField

class SimpleArrayField(base_field, delimiter=', ', max_length=None, min_length=None)

一个映射到数组的简单字段。它由HTML <input>表示。

base_field

这是必需的参数。

它指定数组的基础表单字段。这不用于呈现任何HTML,但它用于处理提交的数据并验证它。例如:

>>> from django.contrib.postgres.forms import SimpleArrayField
>>> from django import forms

>>> 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.contrib.postgres.forms import SimpleArrayField
>>> from django import forms

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

默认情况下,设置为FalseFalse时,存储重复字段中的每个值。当设置为True时,将从结果中去除任何空白的尾随值。如果底层字段required=True,但remove_trailing_nullsTrue,则只允许空值在结尾,并将被剥离。

一些例子:

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

接受HStoreField的JSON编码数据的字段。它将所有的值转换为字符串。它由HTML <textarea>表示。

用户友好的形式

HStoreField在大多数情况下不是特别用户友好的,但它是一种有用的方式来格式化来自客户端小部件的数据以提交到服务器。

注意

在某些情况下,可能需要或限制对给定字段有效的键。这可以使用KeysValidator来完成。

Range Fields

这组字段都具有类似的接受范围数据的功能。它们基于MultiValueField它们将一个省略的值视为无界范围。它们还验证下限不大于上限。所有这些字段都使用RangeWidget

IntegerRangeField

class IntegerRangeField

基于IntegerField并将其输入转换为NumericRangeIntegerRangeFieldBigIntegerRangeField的默认值。

FloatRangeField

class FloatRangeField

基于FloatField并将其输入转换为NumericRangeFloatRangeField的默认值。

DateTimeRangeField

class DateTimeRangeField

基于DateTimeField并将其输入转换为DateTimeTZRangeDateTimeRangeField的默认值。

DateRangeField

class DateRangeField

基于DateField并将其输入转换为DateRangeDateRangeField的默认值。

Widgets

RangeWidget

class RangeWidget(base_widget, attrs=None)

所有范围字段使用的小部件。基于MultiWidget

RangeWidget有一个必需参数:

base_widget

RangeWidget包括base_widget的2元组。

decompress(value)

获取字段的单个“压缩”值,例如DateRangeField,并返回表示元组和下限和上限的元组。