sql >> Base de Datos >  >> RDS >> PostgreSQL

La validación de Django IntegerRangeField falla

El MinValueValidator y MaxValueValidator son para números enteros, por lo que son los validadores incorrectos para usar aquí. En su lugar, use los validadores específicamente para rangos:RangeMinValueValidator y RangeMaxValueValidator .

Ambos validadores viven en el módulo django.contrib.postgres.validators .

Aquí hay un enlace al código fuente del validador.

Además, un IntegerRangeField se representa en Python como psycopg2.extras.NumericRange objeto, así que intente usar eso en lugar de una cadena cuando especifique su default parámetro en el modelo.

Nota:El NumericRange El objeto de forma predeterminada incluye el límite inferior y excluye el límite superior, por lo que NumericRange (0, 100) incluiría 0 y no incluiría 100. Probablemente desee NumericRange (1, 101). También puede especificar un bounds parámetro en su NumericRange objeto de cambiar los valores predeterminados de inclusión/exclusión, en lugar de cambiar los valores numéricos. Consulte la documentación del objeto NumericRange .

Ejemplo:

# models.py file
from django.contrib.postgres.validators import RangeMinValueValidator, RangeMaxValueValidator
from psycopg2.extras import NumericRange

class SomeModel(models.Model):
    age_range = IntegerRangeField(
        default=NumericRange(1, 101),
        blank=True,
        validators=[
            RangeMinValueValidator(1), 
            RangeMaxValueValidator(100)
        ]
    )