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_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 来完成。

范围字段

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

IntegerRangeField

class IntegerRangeField

基于 IntegerField 并将其输入转换为 django.db.backends.postgresql.psycopg_any.NumericRangeIntegerRangeFieldBigIntegerRangeField 的默认值。

DecimalRangeField

class DecimalRangeField

基于 DecimalField 并将其输入转换为 django.db.backends.postgresql.psycopg_any.NumericRangeDecimalRangeField 的默认值。

DateTimeRangeField

class DateTimeRangeField

基于 DateTimeField 并将其输入转换为 django.db.backends.postgresql.psycopg_any.DateTimeTZRangeDateTimeRangeField 的默认值。

DateRangeField

class DateRangeField

基于 DateField,并将它的输入转换为 django.db.backends.postgresql.psycopg_any.DateRangeDateRangeField 的默认值。

Widgets

RangeWidget

class RangeWidget(base_widget, attrs=None)

所有范围字段使用的 Widget。基于 MultiWidget.

RangeWidget 有一个必需的参数

base_widget

一个 RangeWidget 包含一个 base_widget 的 2 元组。

decompress(value)

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

返回顶部