# Django 5.2.8 documentation

# 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 kedja `SimpleArrayField` 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är `False`, 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 har `required=True`, men `remove_trailing_nulls` är `True`, ä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 till `django.db.backends.postgresql.psycopg_any.NumericRange`. Standard för `IntegerRangeField` och `BigIntegerRangeField`.

#### `DecimalRangeField`

class DecimalRangeField

  Baserad på `DecimalField` och översätter dess indata till `django.db.backends.postgresql.psycopg_any.NumericRange`. Standard för `DecimalRangeField`.

#### `DatumTimeRangeField`

class DateTimeRangeField

  Baserad på `DateTimeField` och översätter dess indata till `django.db.backends.postgresql.psycopg_any.DateTimeTZRange`. Standard för `DateTimeRangeField`.

#### `Datumintervallfält`

class DateRangeField

  Baserat på `DateField` och översätter dess indata till `django.db.backends.postgresql.psycopg_any.DateRange`. Standard för `DateRangeField`.

## 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 av `base_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.