如何在Django Rest的IntegerField上设置最大长度

3

好的,我需要让我的字段最多只能输入10个整数。我尝试使用MaxValueValidator,但我发现这只需要低于设置值的一个值。我希望能够输入最多10个数字,因此如果我只输入一个数字,它应该可以工作,但如果我输入10个数字也应该可以。

代码示例:

class Random(models.Model):
     code=models.IntegerField

max_length 作为一个函数在 IntFields 上似乎不起作用,所以我需要一个替代方法。谢谢。 - NoobsCool
validators=[MaxValueValidator(9999999999)] 有什么问题吗? - Reza Heydari
2个回答

3

您可以尝试以下代码(未经测试):

#add this import statement at top

from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _

#A function to check length
def validate_length(value):
    an_integer = value
    a_string = str(an_integer)
    length = len(a_string)
    if length > 10:
        raise ValidationError(
            _('%(value)s is above 10 digits')
        )

#Add to model field
class MyModel(models.Model):
    validate_len = models.IntegerField(validators=[validate_length])

请参考下面链接:https://docs.djangoproject.com/en/3.2/ref/validators/


init()”收到了一个意外的关键字参数“params”的错误提示。编辑:删除了“params”行,程序可以正常运行,只是会出现这个错误。太棒了,谢谢!^^ - NoobsCool
没错。为了简单起见,我将删除那些参数。 - Pavan Chandaka

0

RegexValidator可以与正确的正则表达式一起使用。如果将IntegerField更改为CharField不是什么大问题,您也可以编写验证器以确保code最多只有10位数字。它可以是自定义验证器,验证每个字符是数字且总数不超过10位,以及您可能拥有的任何其他要求。


好的,这就是请求的方式。您能否给我一个例子,说明如何在models.CharField上使用验证器?提前致谢。 - NoobsCool
code=models.IntegerField(validators=[RegexValidator(r'^\d{1,10}$')])。我原以为 IntegerField 无法使用 RegexValidator,但我认为我可能是错误的。尝试将该解决方案用于 IntegerFieldCharField,并查看是否有效。 - purple
尝试使用IntegerField,没有引发任何错误,但由于某种原因它没有起作用,仍然可以输入超过10个数字。尝试使用CharField,这将需要max_length属性和一些其他错误。 - NoobsCool
嗯... 或许RegexValidator中的正则表达式语法不同? Django文档说RegexValidator使用re.search()搜索值。当我直接使用我上面写的正则表达式和re.search()时,我得到了正确的结果。请确保正则表达式是正确的,因为在我最初的评论中有一个错别字。 - purple

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接