Django max_length 用于 IntegerField

Django max_length for IntegerField

我有这个模型字段:

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

max_length 限制无效。我可以登录到管理员并创建一个 ID 超过 10 个字符的学生。我该如何解决?

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 的优势。

from django.core.validators import RegexValidator

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