PostgreSQL 特定的表单域和小部件 — Django 文档

来自菜鸟教程
Django/docs/3.2.x/ref/contrib/postgres/forms
跳转至:导航、​搜索

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


JSONField

class JSONField

接受 JSONField 的 JSON 编码数据的字段。 它由 HTML <textarea> 表示。

用户友好的表格

JSONField 在大多数情况下不是特别用户友好,但它是一种有用的方式来格式化来自客户端小部件的数据以提交到服务器。

自 3.1 版起已弃用: 改用 django.forms.JSONField


范围字段

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

IntegerRangeField

class IntegerRangeField
基于 IntegerField 并将其输入转换为 NumericRangeIntegerRangeFieldBigIntegerRangeField 的默认值。


DecimalRangeField

class DecimalRangeField
基于 DecimalField 并将其输入转换为 NumericRangeDecimalRangeField 的默认值。


DateTimeRangeField

class DateTimeRangeField
基于 DateTimeField 并将其输入转换为 DateTimeTZRangeDateTimeRangeField 的默认值。


DateRangeField

class DateRangeField
基于 DateField 并将其输入转换为 DateRangeDateRangeField 的默认值。


小工具

RangeWidget

class RangeWidget(base_widget, attrs=None)

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

RangeWidget 有一个必需的参数:

base_widget

RangeWidget 包含 base_widget 的 2 元组。

decompress(value)

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