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?
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}$')])