我在我的应用程序中定义了一个模型表单,在我的一个表单域中,我希望用户输入他们的输入,但输入的第一个字母在首都。如果情况并非如此,应用程序应该抛出错误并提示用户重新输入特定的表单条目。Django:表单验证接受第一个字母在CAPS中的字符串
是否有一个内置的Django表单验证器来实现这样的限制?
PS:我知道ModelForm
提供的capitalize()
方法,它将表单字段存储在数据库中,首字母大写。但是,这对我来说不起作用,因为我想验证表单提交前的输入。
我在我的应用程序中定义了一个模型表单,在我的一个表单域中,我希望用户输入他们的输入,但输入的第一个字母在首都。如果情况并非如此,应用程序应该抛出错误并提示用户重新输入特定的表单条目。Django:表单验证接受第一个字母在CAPS中的字符串
是否有一个内置的Django表单验证器来实现这样的限制?
PS:我知道ModelForm
提供的capitalize()
方法,它将表单字段存储在数据库中,首字母大写。但是,这对我来说不起作用,因为我想验证表单提交前的输入。
from django.db import models
from django.core.exceptions import ValidationError
def validate_capitalized(value):
if value != value.capitalize():
raise ValidationError('Invalid (not capitalized) value: %(value)s',
code='invalid',
params={'value': value})
class MyModel(models.Model):
name = models.CharField(max_length=50, validators=[validate_capitalized])
您可以根据需要自定义ValidationError。 Docs:validators,ValidationError。
您可以在窗体或模型字段中使用验证器,请参阅文档:Using validators和Writing validators。
引用一个简单的可调用来执行检查并引发异常。
为什么不直接用'capitalize()'修复它? [EAFP](https://docs.python.org/2/glossary.html#term-eafp)? – IanAuld
@IanAuld我已经在我的OP中提到过这个。我希望用户自己在表单域中输入正确的输入。如果没有别的,'capitalize()'会起作用。但是,我想知道是否有另一种方法在我的表单中实现这个约束。 –
然后使用jQuery /客户端验证。而且,值得你说的是,你不想这么做,并不是为什么你不想这么做,这是一个非常重要的差异。 – IanAuld