2015-06-15 7 views
12

ho questo campo Modello:Django max_length per IntegerField

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

La restrizione max_length non funziona. Posso accedere all'amministratore e creare uno studente con un ID con più di 10 caratteri. Come posso risolvere questo?

risposta

30

Django ignora max_length per i campi integer e ti avviserà in Django 1.8+. Vedi ticket 23801 per maggiori dettagli.

È possibile utilizzare un valore massimo di convalida,

from django.core.validators import MaxValueValidator 

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

o utilizzare un CharField per memorizzare l'ID, e utilizzare un validatore regex per assicurare che l'ID è realizzata interamente in cifre. Ciò avrebbe il vantaggio di consentire id che iniziano con zero.

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