我有一个模型字段:
id_student = models.PositiveIntegerField(primary_key=True, max_length=10)
max_length
约束不起作用。我可以登录管理页面并创建一个具有超过10个字符的学生ID。我该如何解决这个问题?
我有一个模型字段:
id_student = models.PositiveIntegerField(primary_key=True, max_length=10)
max_length
约束不起作用。我可以登录管理页面并创建一个具有超过10个字符的学生ID。我该如何解决这个问题?
Django在整数字段上忽略max_length
属性,并且会在Django 1.8+版本中发出警告。有关详细信息,请参见票号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}$')])