PostgreSQL 特定的表单字段和小部件¶
所有这些字段和小部件都可从 django.contrib.postgres.forms
模块获得。
字段¶
SimpleArrayField
¶
- class SimpleArrayField(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
¶
- 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
来完成。
范围字段¶
这组字段都具有类似的功能,用于接受范围数据。它们基于 MultiValueField
。它们将一个省略的值视为无界范围。它们还验证下界不大于上界。所有这些字段都使用 RangeWidget
。
IntegerRangeField
¶
- class IntegerRangeField¶
基于
IntegerField
并将其输入转换为django.db.backends.postgresql.psycopg_any.NumericRange
。IntegerRangeField
和BigIntegerRangeField
的默认值。
DecimalRangeField
¶
- class DecimalRangeField¶
基于
DecimalField
并将其输入转换为django.db.backends.postgresql.psycopg_any.NumericRange
。DecimalRangeField
的默认值。
DateTimeRangeField
¶
- class DateTimeRangeField¶
基于
DateTimeField
并将其输入转换为django.db.backends.postgresql.psycopg_any.DateTimeTZRange
。DateTimeRangeField
的默认值。
DateRangeField
¶
- class DateRangeField¶
基于
DateField
,并将它的输入转换为django.db.backends.postgresql.psycopg_any.DateRange
。DateRangeField
的默认值。
Widgets¶
RangeWidget
¶
- class RangeWidget(base_widget, attrs=None)¶
所有范围字段使用的 Widget。基于
MultiWidget
.RangeWidget
有一个必需的参数- base_widget¶
一个
RangeWidget
包含一个base_widget
的 2 元组。
- decompress(value)¶
获取字段的单个“压缩”值,例如
DateRangeField
,并返回表示下限和上限的元组。