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_nulls
為True
,則只允許在結尾有 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.NumericRange
。IntegerRangeField
和BigIntegerRangeField
的預設值。
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¶
RangeWidget
由一個包含兩個base_widget
的元組組成。
- decompress(value)¶
接受一個欄位的單個「壓縮」值,例如
DateRangeField
,並返回一個表示下限和上限的元組。