2015-06-15 74 views
12

我有這個型號區域:Django的MAX_LENGTH爲IntegerField

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

max_length限制不起作用。我可以登錄管理員並創建一個ID超過10個字符的學生。我該如何解決這個問題?

回答

30

Django忽略整數字段的max_length,並會在Django 1.8+中警告您。有關更多詳細信息,請參閱ticket 23801

您可以使用一個最大值驗證,

from django.core.validators import MaxValueValidator 

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

或使用CharField存儲ID,並使用正則表達式驗證,以確保ID完全由數字。這將具有允許以零開頭的ID的優點。

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