好的,我需要让我的字段最多只能输入10个整数。我尝试使用MaxValueValidator
,但我发现这只需要低于设置值的一个值。我希望能够输入最多10个数字,因此如果我只输入一个数字,它应该可以工作,但如果我输入10个数字也应该可以。
代码示例:
class Random(models.Model):
code=models.IntegerField
好的,我需要让我的字段最多只能输入10个整数。我尝试使用MaxValueValidator
,但我发现这只需要低于设置值的一个值。我希望能够输入最多10个数字,因此如果我只输入一个数字,它应该可以工作,但如果我输入10个数字也应该可以。
代码示例:
class Random(models.Model):
code=models.IntegerField
您可以尝试以下代码(未经测试):
#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/
RegexValidator
可以与正确的正则表达式一起使用。如果将IntegerField
更改为CharField
不是什么大问题,您也可以编写验证器以确保code
最多只有10位数字。它可以是自定义验证器,验证每个字符是数字且总数不超过10位,以及您可能拥有的任何其他要求。
code=models.IntegerField(validators=[RegexValidator(r'^\d{1,10}$')])
。我原以为 IntegerField
无法使用 RegexValidator
,但我认为我可能是错误的。尝试将该解决方案用于 IntegerField
或 CharField
,并查看是否有效。 - purpleRegexValidator
中的正则表达式语法不同? Django文档说RegexValidator
使用re.search()
搜索值。当我直接使用我上面写的正则表达式和re.search()
时,我得到了正确的结果。请确保正则表达式是正确的,因为在我最初的评论中有一个错别字。 - purple
validators=[MaxValueValidator(9999999999)]
有什么问题吗? - Reza Heydari