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_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
¶
-
class
HStoreField
¶ 接受
HStoreField
的JSON编码数据的字段。它将所有的值转换为字符串。它由HTML<textarea>
表示。用户友好的形式
HStoreField
在大多数情况下不是特别用户友好的,但是它是将来自客户端小部件的数据格式化以提交到服务器的有用方式。注解
在某些情况下,可能需要或限制对于给定字段有效的键。这可以使用
KeysValidator
来完成。
JSONField
¶
范围字段¶
这组字段都具有接受范围数据的类似功能。它们基于 MultiValueField
。它们将一个省略的值视为无界范围。它们还验证下限不大于上限。所有这些字段使用 RangeWidget
。
IntegerRangeField
¶
-
class
IntegerRangeField
¶ 基于
IntegerField
并将其输入转换为NumericRange
。IntegerRangeField
和BigIntegerRangeField
的默认值。
FloatRangeField
¶
-
class
FloatRangeField
¶ 基于
FloatField
并将其输入转换为NumericRange
。FloatRangeField
的默认值。
DateTimeRangeField
¶
-
class
DateTimeRangeField
¶ 基于
DateTimeField
并将其输入转换为DateTimeTZRange
。DateTimeRangeField
的默认值。
DateRangeField
¶
-
class
DateRangeField
¶ 基于
DateField
并将其输入转换为DateRange
。DateRangeField
的默认值。
窗口小部件¶
RangeWidget
¶
-
class
RangeWidget
(base_widget, attrs=None)¶ 所有范围字段使用的小部件。基于
MultiWidget
。RangeWidget
有一个必需的参数:-
base_widget
¶ RangeWidget
包括2元组的base_widget
。
-
decompress
(value)¶ 获取字段的单个“压缩”值,例如
DateRangeField
,并返回表示元组和下限和上限的元组。
-