dJango forms.DateField

时间:2012-03-30 02:58:23

标签: python django django-forms

我是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>

2 个答案:

答案 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])