PostgreSQL 特有表單欄位與 Widget

所有這些欄位與 Widget 都可從 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 在大多數情況下並不是特別使用者友善,但它是格式化來自客戶端 Widget 的資料以提交到伺服器的有用方法。

SplitArrayField

class SplitArrayField(base_field, size, remove_trailing_nulls=False)

此欄位藉由重複基礎欄位固定次數來處理陣列。

base_field

這是一個必要參數。它指定要重複的表單欄位。

size

這是基礎欄位將被使用的固定次數。

remove_trailing_nulls

預設情況下,此值設定為 False。當 False 時,會儲存重複欄位的每個值。當設定為 True 時,任何空白的尾隨值都會從結果中移除。如果基礎欄位有 required=True,但 remove_trailing_nullsTrue,則只允許在結尾有 null 值,並且會移除這些值。

一些範例

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。它將所有值 (除了 null) 轉換為字串。它由一個 HTML <textarea> 表示。

使用者友善的表單

HStoreField 在大多數情況下並不是特別使用者友善,但它是格式化來自客戶端 Widget 的資料以提交到伺服器的有用方法。

注意

有時,可能需要要求或限制給定欄位的有效鍵。這可以使用 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.DateRange。為 DateRangeField 的預設值。

小工具

RangeWidget

class RangeWidget(base_widget, attrs=None)

所有範圍欄位使用的小工具。基於 MultiWidget

RangeWidget 有一個必要參數

base_widget

RangeWidget 由一個包含兩個 base_widget 的元組組成。

decompress(value)

接受一個欄位的單個「壓縮」值,例如 DateRangeField,並返回一個表示下限和上限的元組。

回到頂端