You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django Rest的IntegerField字段上设置最大输入长度限制

Django IntegerField 1-10位数字校验方案

实现方式

你可以通过两种方式完成位数校验,替代无法满足需求的MaxValueValidator:

方案1:使用内置RegexValidator(推荐)

直接通过正则匹配限制数字长度,代码最简:

from django.db import models
from django.core.validators import RegexValidator

# 校验规则:仅允许1到10位数字
digit_length_validator = RegexValidator(
    regex=r'^\d{1,10}$',
    message='请输入1~10位的有效数字'
)

class Random(models.Model):
    code = models.IntegerField(validators=[digit_length_validator])

方案2:自定义验证器

如果不想使用正则,可以自定义校验函数实现相同逻辑:

from django.db import models
from django.core.exceptions import ValidationError

def validate_code_length(value):
    # 将数值转为字符串统计位数
    value_length = len(str(value))
    if not 1 <= value_length <= 10:
        raise ValidationError('数字长度必须控制在1到10位之间')

class Random(models.Model):
    code = models.IntegerField(validators=[validate_code_length])

注意事项

  • IntegerField会自动过滤输入的前置0,如果你需要保留前置0,可将字段替换为CharField,上述两个验证器无需修改即可直接复用
  • 验证器仅在表单提交、Admin录入时自动触发,如果你直接调用模型的save()方法存储数据,需要先调用full_clean()手动触发校验:
    random_obj = Random(code=123456)
    random_obj.full_clean() # 执行校验,不通过会抛出ValidationError
    random_obj.save()
    

内容的提问来源于stack exchange,提问作者NoobsCool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 17:51:03