2015-07-21 56 views
1

我在我的应用程序中定义了一个模型表单,在我的一个表单域中,我希望用户输入他们的输入,但输入的第一个字母在首都。如果情况并非如此,应用程序应该抛出错误并提示用户重新输入特定的表单条目。Django:表单验证接受第一个字母在CAPS中的字符串

是否有一个内置的Django表单验证器来实现这样的限制?

PS:我知道ModelForm提供的capitalize()方法,它将表单字段存储在数据库中,首字母大写。但是,这对我来说不起作用,因为我想验证表单提交前的输入。

+0

为什么不直接用'capitalize()'修复它? [EAFP](https://docs.python.org/2/glossary.html#term-eafp)? – IanAuld

+0

@IanAuld我已经在我的OP中提到过这个。我希望用户自己在表单域中输入正确的输入。如果没有别的,'capitalize()'会起作用。但是,我想知道是否有另一种方法在我的表单中实现这个约束。 –

+0

然后使用jQuery /客户端验证。而且,值得你说的是,你不想这么做,并不是为什么你不想这么做,这是一个非常重要的差异。 – IanAuld

回答

1
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:validatorsValidationError

相关问题