web-dev-qa-db-fra.com

Django longueur_max pour IntegerField

J'ai ce champ modèle:

id_student = models.PositiveIntegerField(primary_key=True, max_length=10)

Le max_length la restriction ne fonctionne pas. Je peux me connecter à l'administrateur et créer un étudiant avec un identifiant avec plus de 10 caractères. Comment puis-je résoudre ça?

20

Django ignore max_length pour les champs entiers, et vous avertira dans Django 1.8+. Voir ticket 23801 pour plus de détails.

Vous pouvez soit utiliser un validateur de valeur max,

from Django.core.validators import MaxValueValidator

class MyModel(models.Model):
    ...
    id_student = models.PositiveIntegerField(primary_key=True, validators=[MaxValueValidator(9999999999)])

ou utilisez un CharField pour stocker l'identifiant et utilisez un validateur d'expressions régulières pour vous assurer que l'identifiant est entièrement composé de chiffres. Cela aurait l'avantage d'autoriser les identifiants commençant par zéro.

class MyModel(models.Model):
    ...
    id_student = models.CharField(primary_key=True, max_length=10, validators=[RegexValidator(r'^\d{1,10}$')])
46
Alasdair