PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Django IntegerRangeField Convalida non riuscita

Il MinValueValidator e MaxValueValidator sono per numeri interi, quindi sono i validatori errati da usare qui. Usa invece i validatori specificamente per gli intervalli:RangeMinValueValidator e RangeMaxValueValidator .

Entrambi questi validatori risiedono nel modulo django.contrib.postgres.validators .

Ecco un link al codice sorgente del validatore.

Inoltre, un IntegerRangeField è rappresentato in Python come un psycopg2.extras.NumericRange oggetto, quindi prova a usarlo invece di una stringa quando specifichi il tuo default parametro nel modello.

Nota:il NumericRange l'oggetto per impostazione predefinita include il limite inferiore ed esclude il limite superiore, quindi NumericRange(0, 100) includerebbe 0 e non includerebbe 100. Probabilmente vuoi NumericRange(1, 101). Puoi anche specificare un bounds parametro nel tuo NumericRange oggetto di modificare i valori predefiniti per l'inclusione/esclusione, invece di modificare i valori numerici. Vedi la documentazione dell'oggetto NumericRange .

Esempio:

# 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)
        ]
    )