PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Échec de la validation de Django IntegerRangeField

Le MinValueValidator et MaxValueValidator sont pour les entiers, ce sont donc les validateurs incorrects à utiliser ici. Utilisez plutôt les validateurs spécifiquement pour les plages :RangeMinValueValidator et RangeMaxValueValidator .

Ces deux validateurs résident dans le module django.contrib.postgres.validators .

Voici un lien au code source du validateur.

En outre, un IntegerRangeField est représenté en Python par un psycopg2.extras.NumericRange objet, essayez donc de l'utiliser au lieu d'une chaîne lorsque vous spécifiez votre default paramètre dans le modèle.

Remarque :La NumericRange L'objet par défaut inclut la limite inférieure et exclut la limite supérieure, donc NumericRange(0, 100) inclura 0 et n'inclura pas 100. Vous voulez probablement NumericRange(1, 101). Vous pouvez également spécifier un bounds paramètre dans votre NumericRange objet pour modifier les valeurs par défaut pour l'inclusion/exclusion, au lieu de modifier les valeurs numériques. Voir la documentation de l'objet NumericRange .

Exemple :

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