Skip to main content

PostgreSQL特定的表单字段和小部件

所有这些字段和小部件都可从 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

默认情况下,它设置为 False。当 False 时,存储来自重复字段的每个值。当设置为 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 来完成。

JSONField

class JSONField

接受 JSONField 的JSON编码数据的字段。它由HTML <textarea> 表示。

用户友好的形式

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

范围字段

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

IntegerRangeField

class IntegerRangeField

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

FloatRangeField

class FloatRangeField

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

DateTimeRangeField

class DateTimeRangeField

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

DateRangeField

class DateRangeField

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

窗口小部件

RangeWidget

class RangeWidget(base_widget, attrs=None)

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

RangeWidget 有一个必需的参数:

base_widget

RangeWidget 包括2元组的 base_widget

decompress(value)

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