2015-06-15 52 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}$')]) 
相关问题