用于 IntegerField 的 Django max_length

标签 django django-models django-admin

我有这个模型字段:

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/

相关文章:

python - 如何在settings.py中获取主机名或IP,以便我可以使用它来决定要使用哪个应用程序的网址

python - 如何使用 Docker 清除 Django 的缓存?

python - Django post_save() 信号实现

Django 管理更改列表优化查询 : select field1, field2 而不是选择 *

python - django admin - 强制用户创建新记录而不是利用现有记录

python - 即使 allow_tags=True,Django Admin 也会显示转义的 HTML

django 中的 MySQL 前缀索引?

django - Google Maps Geolocation API 调用在网络服务器上而非本地返回无效请求

python - 对于这种(虚拟表的)API,我应该规范化我的模型还是使用大表?

django - 如何将 Model.viewset 中的查找字段更改为 Django Rest Framework 中的其他唯一参数?