PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Falha na validação do Django IntegerRangeField


O MinValueValidator e MaxValueValidator são para números inteiros, então eles são os validadores incorretos para usar aqui. Em vez disso, use os validadores especificamente para intervalos:RangeMinValueValidator e RangeMaxValueValidator .

Ambos os validadores vivem no módulo django.contrib.postgres.validators .

Aqui está um link ao código-fonte do validador.

Além disso, um IntegerRangeField é representado em Python como um psycopg2.extras.NumericRange objeto, então tente usar isso em vez de uma string quando você especificar seu default parâmetro no modelo.

Observação:o NumericRange por padrão, o objeto inclui o limite inferior e exclui o limite superior, portanto, NumericRange(0, 100) inclui 0 e não inclui 100. Você provavelmente deseja NumericRange(1, 101). Você também pode especificar um bounds parâmetro em seu NumericRange objeto para alterar os padrões de inclusão/exclusão, em vez de alterar os valores numéricos. Consulte a a documentação do objeto NumericRange .

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