如何在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
相关产品推荐
相关产品推荐

