---
title: "Bidang formulir khusus PostgreSQL dan widget"
version: 6.1
locale: id
source: https://docs.djangoproject.com/id/6.1/ref/contrib/postgres/forms/
canonical: https://djangodocs.dev/id/6.1/ref/contrib/postgres/forms/
---
# 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)`

A field which maps to an array. It is represented by an HTML `<input>`.

#### `base_field`

Ini adalah sebuah argumen diwajibkan.

It specifies the underlying form field for the array. This is not used
to render any HTML, but it is used to process the submitted data and
validate it. For example:

```pycon
>>> 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`

This is an optional argument which defaults to a comma: `,`. This
value is used to split the submitted data. It allows you to chain
`SimpleArrayField` for multidimensional data:

```pycon
>>> 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]]}
```

> **Note**
>
> 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)`

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`. Ketika `False`, setiap nilai dari bdiang-bidang terulang disimpan. Ketika disetel menjadi `True`, nilai-nilai apapun yang membuntuti yang merupakan kosong akan dihilangkan dari hasil. Jika bidang pokok mempunyai `required=True`, tetapi `remove_trailing_nulls` adalah `True`, 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`

Sebuah bidang yang menerima data tersandikan JSON untuk sebuah [`HStoreField`](/id/6.1/ref/contrib/postgres/fields/#django.contrib.postgres.fields.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.

> **Note**
>
> Pada kesempatan itu mungkin berguna untuk membutuhkan atau membatasi kunci-kunci yang sah untuk bidang diberikan. Ini dapat dilakukan menggunakan [`KeysValidator`](/id/6.1/ref/contrib/postgres/validators/#django.contrib.postgres.validators.KeysValidator).

### Bidang Jangkauan

Kelompok ini dari bidang-bidang semua berbagi kegunaan yang mirip untuk menerima jangkauan data. Mereka berdasarkan pada [`MultiValueField`](/id/6.1/ref/forms/fields/#django.forms.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`](#django.contrib.postgres.forms.RangeWidget).

#### `IntegerRangeField`

#### `class IntegerRangeField`

Based on [`IntegerField`](/id/6.1/ref/forms/fields/#django.forms.IntegerField) and translates its input into
`django.db.backends.postgresql.psycopg_any.NumericRange`. Default for
[`IntegerRangeField`](/id/6.1/ref/contrib/postgres/fields/#django.contrib.postgres.fields.IntegerRangeField) and
[`BigIntegerRangeField`](/id/6.1/ref/contrib/postgres/fields/#django.contrib.postgres.fields.BigIntegerRangeField).

#### `DecimalRangeField`

#### `class DecimalRangeField`

Based on [`DecimalField`](/id/6.1/ref/forms/fields/#django.forms.DecimalField) and translates its input into
`django.db.backends.postgresql.psycopg_any.NumericRange`. Default for
[`DecimalRangeField`](/id/6.1/ref/contrib/postgres/fields/#django.contrib.postgres.fields.DecimalRangeField).

#### `DateTimeRangeField`

#### `class DateTimeRangeField`

Based on [`DateTimeField`](/id/6.1/ref/forms/fields/#django.forms.DateTimeField) and translates its input into
`django.db.backends.postgresql.psycopg_any.DateTimeTZRange`. Default for
[`DateTimeRangeField`](/id/6.1/ref/contrib/postgres/fields/#django.contrib.postgres.fields.DateTimeRangeField).

#### `DateRangeField`

#### `class DateRangeField`

Based on [`DateField`](/id/6.1/ref/forms/fields/#django.forms.DateField) and translates its input into
`django.db.backends.postgresql.psycopg_any.DateRange`. Default for
[`DateRangeField`](/id/6.1/ref/contrib/postgres/fields/#django.contrib.postgres.fields.DateRangeField).

## Widget

### `RangeWidget`

#### `class RangeWidget(base_widget, attrs=None)`

Widget-widget digunakan oleh semua dari jenis-jenis jangkauan. Berdasarkan pada [`MultiWidget`](/id/6.1/ref/forms/widgets/#django.forms.MultiWidget).

[`RangeWidget`](#django.contrib.postgres.forms.RangeWidget) mempunyai satu argumen yang diwajibkan:

#### `base_widget`

Sebuah [`RangeWidget`](#django.contrib.postgres.forms.RangeWidget) terdiri dari 2-tuple dari `base_widget`.

#### `decompress(value)`

Takes a single "compressed" value of a field, for example a
[`DateRangeField`](/id/6.1/ref/contrib/postgres/fields/#django.contrib.postgres.fields.DateRangeField),
and returns a tuple representing a lower and upper bound.
