我是dJango的新手,我在使用form.DateField时遇到了问题,例如我输入了“2011-01-01”而我的input_formats = ['%Y-%m-%d']所以很明显接受它,但当我输入值“2011-01-1”django仍然接受该格式,因为django将读取该值为“2011-01-01”,我不希望这发生,我想做一个验证在哪里在我输入一个值(“2011-10-1”)时,它会引发错误......
请帮忙....谢谢....
好的,我会清楚地解释一下......这是我的代码: class Info(forms.Form): bday = forms.DateField(input_formats = ['%Y%m%d'],label ='bday',error_messages = {'required':'请输入您的出生日期','无效':'输入的日期无效,应该是YYYYMMDD格式'})#I want to put here a validation(any validation)
这是一个问题...... 如果我把'201122'意味着2011年2月2日,django将接受它,因为django将自动将'201122'转换为'20110202'并且我不希望这种情况发生,我想要的是进行验证,如果我输入6数字只会引发错误,我将如何做到这一点,我尝试了所有可能的情况,但django仍然自动转换它...或者是否有可能为forms.DateField做一个正则表达式?帮助pleaseeeeeeeeeeeeeeee .... / p>
答案 0 :(得分:2)
我可以问为什么? DateTime字段规范化为python日期时间对象,您可以根据需要进行格式化。
无论如何,您可以使用自定义字段执行此操作。
import re
class PickyDateField(forms.DateField):
def validate(self, value):
if not re.match(r'[0-9]{4}-[0-9]{2}-[0-9]{2}', value):
raise forms.ValidationError('Wrong date format.')
# ...
class SomeForm(forms.Form):
pickydate = PickyDateField()
答案 1 :(得分:2)
无需编写自定义表单字段即可实现此目的。相反,您可以像这样在字段中添加验证器:
from django.core.exceptions import ValidationError
def my_super_validator(value):
if something_is_wrong:
raise ValidationError('Wrong date format')
class SomeForm(forms.Form):
mydate = forms.DateField(validators=[my_super_validator])