Campos y widgets específicos de PostgreSQL

Todos estos campos y controles están disponibles desde el módulo django.contrib.postgres.forms.

Campos

SimpleArrayField

class SimpleArrayField(base_field, delimiter=',', max_length=None, min_length=None)

Un campo que se mapea a un arreglo. Está representado por un <input> de HTML.

base_field

Este es un argumento obligatorio.

Especifica el campo de formulario subyacente para la matriz. Esto no se utiliza para renderizar ningún HTML, pero se utiliza para procesar los datos enviados y validarlos. Por ejemplo:

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

Este es un argumento opcional que por defecto se establece en una coma: ,. Este valor se utiliza para dividir los datos suministrados. Permite a ti encadenar SimpleArrayField para datos multidimensionales:

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

Nota

El campo no admite escape de la delimitadora, así que ten cuidado en los casos donde la delimitadora es un carácter válido en el campo subyacente. La delimitadora no necesita ser solo un carácter.

max_length

Este es un argumento opcional que valida que el arreglo no excede la longitud indicada.

min_length

Este es un argumento opcional que valida que el arreglo alcance al menos la longitud indicada.

Formularios amigables con el usuario

Campo de Array Simple no es particularmente amigable para el usuario en la mayoría de los casos, sin embargo es una forma útil de formatear datos desde un widget del lado del cliente para su envío al servidor.

Campo de Array Split

class SplitArrayField(base_field, size, remove_trailing_nulls=False)

Este campo maneja arrays reproduciendo el campo subyacente un número fijo de veces.

base_field

Esta es una argumento requerido. Especifica el campo de formulario que se repetirá.

size

Esto es el número fijo de veces que el campo subyacente se utilizará.

remove_trailing_nulls

Por defecto, esto está configurado en False. Cuando False, cada valor de los campos repetidos se almacena. Al establecerlo a True, cualquier valor final vacío se eliminará del resultado. Si el campo subyacente tiene required=True, pero remove_trailing_nulls es True, entonces solo se permiten valores nulos en el final, y se eliminarán.

Algunos ejemplos:

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

Un campo que acepta datos codificados en JSON para un HStoreField. Convierte todos los valores (excepto nulos) a cadenas. Está representado por un <textarea> HTML.

Formularios amigables con el usuario

Campo de HStore no es particularmente amigable para el usuario en la mayoría de los casos, sin embargo es una forma útil de formatear datos desde un widget del lado del cliente para su envío al servidor.

Nota

En ocasiones puede ser útil requerir o restringir las claves válidas para un campo determinado. Esto se puede hacer utilizando la KeysValidator.

Campos de rango

Este grupo de campos comparten funcionalidad similar para aceptar datos de rango. Están basados en MultiValueField. Tratan uno de los valores omitidos como un rango sin límite. También validan que el límite inferior no sea mayor que el límite superior. Todos estos campos utilizan RangeWidget.

IntegerRangeField

class IntegerRangeField

Basado en IntegerField y traduce su entrada a django.db.backends.postgresql.psycopg_any.NumericRange. Por defecto para IntegerRangeField y BigIntegerRangeField.

DecimalRangeField

class DecimalRangeField

Basado en DecimalField y traduce su entrada a django.db.backends.postgresql.psycopg_any.NumericRange. Por defecto para DecimalRangeField.

DateTimeRangeField

class DateTimeRangeField

Basado en DateTimeField y traduce su entrada a django.db.backends.postgresql.psycopg_any.DateTimeTZRange. Por defecto para DateTimeRangeField.

Campo de Fecha Rango

class DateRangeField

Basado en DateField y traduce su entrada a django.db.backends.postgresql.psycopg_any.DateRange. Por defecto para DateRangeField.

Widgets

RangeWidget

class RangeWidget(base_widget, attrs=None)

Widget utilizado por todos los campos de rango. Basado en MultiWidget.

RangoWidget tiene un argumento requerido:

base_widget

Un RangeWidget comprende una tupla de 2 elementos del base_widget.

decompress(value)

Toma un valor «comprimido» de un campo, por ejemplo un DateRangeField, y devuelve una tupla que representa los límites inferior y superior.