我有这个模型字段:
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}$')])
关于用于 IntegerField 的 Django max_length,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30849862/