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[源代码]

接受JSON编码数据的字段 HStoreField . 它将所有值(空值除外)强制转换为字符串。它由一个HTML表示 <textarea> .

用户友好窗体

HStoreField 在大多数情况下对用户不太友好,但是它是一种很有用的方式,可以将数据从客户端小部件格式化并提交到服务器。

备注

有时,要求或限制对给定字段有效的键可能很有用。可以使用 KeysValidator .

距离场

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

IntegerRangeField

class IntegerRangeField[源代码]

基于 IntegerField 并将其输入转换为 django.db.backends.postgresql.psycopg_any.NumericRange 。默认设置为 IntegerRangeFieldBigIntegerRangeField

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

小部件

RangeWidget

class RangeWidget(base_widget, attrs=None)[源代码]

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

RangeWidget 有一个必需的参数:

base_widget

A RangeWidget 包含2元组 base_widget .

decompress(value)[源代码]

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