IntegerField的Django max_length

时间:2015-06-15 16:05:12

标签: django django-models django-admin

我有这个模型字段:

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

max_length限制不起作用。我可以登录管理员并创建一个id超过10个字符的学生。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:45)

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