PostgreSQL-specifika formulärfält och widgets¶
Alla dessa fält och widgets är tillgängliga från modulen django.contrib.postgres.forms
.
Fält¶
SimpleArrayField
¶
- class SimpleArrayField(base_field, delimiter=',', max_length=None, min_length=None)¶
Ett fält som mappar till en array. Det representeras av en HTML
<input>
.- base_field¶
Detta är ett nödvändigt argument.
Det anger det underliggande formulärfältet för arrayen. Detta används inte för att rendera någon HTML, men det används för att bearbeta de inskickade uppgifterna och validera dem. Ett exempel:
>>> 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¶
Detta är ett valfritt argument som i standardfallet är ett kommatecken:
,
. Detta värde används för att dela upp de data som skickas in. Det gör att du kan kedjaSimpleArrayField
för flerdimensionella data:>>> 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]]}
Observera
Fältet stöder inte escaping av avgränsaren, så var försiktig i de fall avgränsaren är ett giltigt tecken i det underliggande fältet. Avgränsaren behöver inte bestå av endast ett tecken.
- max_length¶
Detta är ett valfritt argument som validerar att matrisen inte överstiger den angivna längden.
- min_length¶
Detta är ett valfritt argument som validerar att matrisen når minst den angivna längden.
Användarvänliga formulär
SimpleArrayField
är inte särskilt användarvänligt i de flesta fall, men det är ett användbart sätt att formatera data från en widget på klientsidan för inlämning till servern.
SplitArrayField
¶
- class SplitArrayField(base_field, size, remove_trailing_nulls=False)¶
Detta fält hanterar matriser genom att reproducera det underliggande fältet ett fast antal gånger.
- base_field¶
Detta är ett obligatoriskt argument. Det anger det formulärfält som ska upprepas.
- size¶
Detta är det fasta antal gånger som det underliggande fältet kommer att användas.
- remove_trailing_nulls¶
Som standard är detta inställt på
False
. NärFalse
, lagras varje värde från de upprepade fälten. När den är inställd påTrue
kommer alla efterföljande värden som är tomma att tas bort från resultatet. Om det underliggande fältet harrequired=True
, menremove_trailing_nulls
ärTrue
, är null-värden endast tillåtna i slutet och kommer att tas bort.Några exempel:
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¶
Ett fält som accepterar JSON-kodade data för en
HStoreField
. Det kastar alla värden (utom nulls) till strängar. Det representeras av en HTML<textarea>
.Användarvänliga formulär
HStoreField
är inte särskilt användarvänligt i de flesta fall, men det är ett användbart sätt att formatera data från en widget på klientsidan för inlämning till servern.Observera
Ibland kan det vara användbart att kräva eller begränsa de nycklar som är giltiga för ett visst fält. Detta kan göras med hjälp av
KeysValidator
.
Område Fält¶
Denna grupp av fält delar alla liknande funktionalitet för att acceptera intervalldata. De är baserade på MultiValueField
. De behandlar ett utelämnat värde som ett obegränsat intervall. De validerar också att den nedre gränsen inte är större än den övre gränsen. Alla dessa fält använder RangeWidget
.
IntegerRangeField
¶
- class IntegerRangeField¶
Baserat på
IntegerField
och översätter dess indata tilldjango.db.backends.postgresql.psycopg_any.NumericRange
. Standard förIntegerRangeField
ochBigIntegerRangeField
.
DecimalRangeField
¶
- class DecimalRangeField¶
Baserad på
DecimalField
och översätter dess indata tilldjango.db.backends.postgresql.psycopg_any.NumericRange
. Standard förDecimalRangeField
.
DatumTimeRangeField
¶
- class DateTimeRangeField¶
Baserad på
DateTimeField
och översätter dess indata tilldjango.db.backends.postgresql.psycopg_any.DateTimeTZRange
. Standard förDateTimeRangeField
.
Datumintervallfält
¶
- class DateRangeField¶
Baserat på
DateField
och översätter dess indata tilldjango.db.backends.postgresql.psycopg_any.DateRange
. Standard förDateRangeField
.
Widgets¶
RangeWidget
¶
- class RangeWidget(base_widget, attrs=None)¶
Widget som används av alla fält i intervallet. Baserat på
MultiWidget
.RangeWidget
har ett obligatoriskt argument:- base_widget¶
En
RangeWidget
består av en 2-tupel avbase_widget
.
- decompress(value)¶
Tar ett enda ”komprimerat” värde för ett fält, t.ex. ett
DateRangeField
, och returnerar en tupel som representerar en nedre och övre gräns.