Bidang formulir khusus PostgreSQL dan widget¶
Semua bidang ini dan widget tersedia dari modul django.contrib.postgres.forms
.
Bidang¶
SimpleArrayField
¶
-
class
SimpleArrayField
(base_field, delimiter=', ', max_length=None, min_length=None)[sumber]¶ Sebuah bidang sederhana yang memetakan ke sebuah larik. Dia diwakilkan oleh sebuah HTML
<input>
.-
base_field
¶ Ini adalah sebuah argumen diwajibkan.
Itu menentukan bidang formulir pokok untuk larik. Ini tidak digunakan untuk membangun HTML apapun, tetapi itu digunakan untuk mengolah data terajukan dan mensahkan itu. Sebagai contoh:
>>> 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
¶ Ini adalah sebuah argumen pilihan yang awalan pada koma:
,
. Nilai ini digunakan untuk memisahkan data terajukan. Itu mengizinkan anda mengikatSimpleArrayField
untuk data multi dimensi:>>> 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]]}
Catatan
Bidang tidak mendukung pelolosan dari pembatas, jadi waspada dalam kasus dimana pembatas adalah karakter sah dalam bidang pokok. Pembatas tidak perlu hanya satu karakter saja.
-
max_length
¶ Ini adalah argumen pilihan yang mensahkan bahwa senaraitidak melampaui panjang yang dinyatakan.
-
min_length
¶ Ini adalah argumen pilihan yang mensahkan bahwa senarai mencapai setidaknya panjang yang dinyatakan.
Formulir ramah
SimpleArrayField
tidak terlalu ramah dalam kebanyakan kasus, bagaimanapun itu adalah cara berguna untuk membentuk data dari widget sisi-klien untuk pengajuan ke peladen.-
SplitArrayField
¶
-
class
SplitArrayField
(base_field, size, remove_trailing_nulls=False)[sumber]¶ Bidang ini menangani larik dengan membuat kembali bidang pokok tetap beberapa kali.
-
base_field
¶ Ini adalah argumen diwajibkan. Itu menentukan bidang formulir untuk diulang.
-
size
¶ Ini adalah nomor tetap dari berkali-kali bidang pokok akan digunakan.
-
remove_trailing_nulls
¶ Secara awalan, ini disetel menjadi
False
. KetikaFalse
, setiap nilai dari bdiang-bidang terulang disimpan. Ketika disetel menjadiTrue
, nilai-nilai apapun yang membuntuti yang merupakan kosong akan dihilangkan dari hasil. Jika bidang pokok mempunyairequired=True
, tetapiremove_trailing_nulls
adalahTrue
, kemudian nilai-nilai null hanya diijinkan pada akhir, dan akan dihilangkan.Beberapa contoh:
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
[sumber]¶ Sebuah bidang yang menerima data tersandikan JSON untuk sebuah
HStoreField
. Itu melemparkan semua nilai (kecuali null) ke string. Itu diwakili oleh sebuah HTML<textarea>
.Formulir ramah
HStoreField
tidak terlalu ramah dalam kebanyakan kasus, bagaimanapun itu sanadalah cara berguna untuk membentuk data dari widget sisi-klien untuk pengajuan ke peladen.Catatan
Pada kesempatan itu mungkin berguna untuk membutuhkan atau membatasi kunci-kunci yang sah untuk bidang diberikan. Ini dapat dilakukan menggunakan
KeysValidator
.
JSONField
¶
-
class
JSONField
[sumber]¶ Sebuah bidang yang menerima data tersandikan JSON untuk sebuah
JSONField
. Itu diwakilkan oleh sebuah HTML<textarea>
.Formulir ramah
JSONField
secara khusus tidak ramah pengguna dalam kebanyakan kasus, bagaimanapun itu adalah berguna untuk membentuk data dari widget sisi-klien untuk pengajuan ke peladen.
Bidang Jangkauan¶
Kelompok ini dari bidang-bidang semua berbagi kegunaan yang mirip untuk menerima jangkauan data. Mereka berdasarkan pada MultiValueField
. Mereka memperlakukan satu nilai dihilangkan sebagai sebuah jangkauan tidak terbatas. Mereka juga mensahkan bahwa batasan terendah tidak lebih besar dari batasan teratas. Semua bidang-bidang ini menggunakan RangeWidget
.
IntegerRangeField
¶
-
class
IntegerRangeField
[sumber]¶ Berdasarkan pada
IntegerField
dan merubah masukannya menjadiNumericRange
. Awalan untukIntegerRangeField
danBigIntegerRangeField
.
FloatRangeField
¶
-
class
FloatRangeField
[sumber]¶ Berdasarkan pada
FloatField
dan menterjemahkan masukannya menjadiNumericRange
. Awalan untukFloatRangeField
.
DateTimeRangeField
¶
-
class
DateTimeRangeField
[sumber]¶ Berdasarkan pada
DateTimeField
dan menterjemahkan masukannya menjadiDateTimeTZRange
. Awalan untukDateTimeRangeField
.
Widget¶
RangeWidget
¶
-
class
RangeWidget
(base_widget, attrs=None)[sumber]¶ Widget-widget digunakan oleh semua dari jenis-jenis jangkauan. Berdasarkan pada
MultiWidget
.RangeWidget
mempunyai satu argumen yang diwajibkan:-
base_widget
¶ Sebuah
RangeWidget
terdiri dari 2-tuple daribase_widget
.
-
decompress
(value)[sumber]¶ Mengambil nilai "compressed" tunggal dari sebuah bidang, sebagai contoh sebuah
DateRangeField
, dan mengembalikan sebuah tuple mewakili dan batasan terendah dan teratas.
-