PostgreSQL 特定的表单域和小部件 — Django 文档
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 来完成。
JSONField
- class JSONField
接受 JSONField 的 JSON 编码数据的字段。 它由 HTML
<textarea>
表示。用户友好的表单
JSONField
在大多数情况下不是特别用户友好,但它是一种有用的方式来格式化来自客户端小部件的数据以提交到服务器。
范围字段
这组字段都共享用于接受范围数据的相似功能。 它们基于 MultiValueField。 他们将一个省略的值视为一个无界范围。 他们还验证下限不大于上限。 所有这些字段都使用 RangeWidget。
IntegerRangeField
- class IntegerRangeField
- 基于 IntegerField 并将其输入转换为
NumericRange
。 IntegerRangeField 和 BigIntegerRangeField 的默认值。
DecimalRangeField
- class DecimalRangeField
2.2 版中的新功能。
基于 DecimalField 并将其输入转换为
NumericRange
。 DecimalRangeField 的默认值。
FloatRangeField
- class FloatRangeField
基于 FloatField 并将其输入转换为
NumericRange
。 FloatRangeField 的默认值。自 2.2 版起已弃用: 改用 DecimalRangeField。
DateTimeRangeField
- class DateTimeRangeField
- 基于 DateTimeField 并将其输入转换为
DateTimeTZRange
。 DateTimeRangeField 的默认值。
小工具
RangeWidget
- class RangeWidget(base_widget, attrs=None)
所有范围字段使用的小部件。 基于 MultiWidget。
RangeWidget 有一个必需的参数:
- base_widget
RangeWidget 包含
base_widget
的 2 元组。
- decompress(value)
获取字段的单个“压缩”值,例如 DateRangeField,并返回表示上下限的元组。