Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python dJango forms.DateField_Python_Django_Django Forms - Fatal编程技术网

Python dJango forms.DateField

Python dJango forms.DateField,python,django,django-forms,Python,Django,Django Forms,我是dJango的新手,在使用表单时遇到了一个问题。例如,DateField,我输入了“2011-01-01”和我的输入格式=['%Y-%m-%d'],所以它显然会接受它,但当我输入值“2011-01-1”时,dJango仍然接受该格式,因为dJango会将该值读取为“2011-01-01”,我不希望发生这种情况,我想做一个验证,当我输入一个值(“2011-10-1”)时,它会引发一个错误 请帮忙……谢谢 好的,我会解释清楚的…这是我的代码: 班级信息(forms.Form): bday=for

我是dJango的新手,在使用表单时遇到了一个问题。例如,DateField,我输入了“2011-01-01”和我的输入格式=['%Y-%m-%d'],所以它显然会接受它,但当我输入值“2011-01-1”时,dJango仍然接受该格式,因为dJango会将该值读取为“2011-01-01”,我不希望发生这种情况,我想做一个验证,当我输入一个值(“2011-10-1”)时,它会引发一个错误

请帮忙……谢谢


好的,我会解释清楚的…这是我的代码: 班级信息(forms.Form): bday=forms.DateField(输入格式=['%Y%m%d',label='bday',错误消息={'required':'请输入您的出生日期','无效':'输入的日期无效,应为YYYYMMDD格式')

这里有个问题。。。
如果我输入'201122',也就是2011年2月2日,django会接受它,因为django会自动将'201122'转换为'20110202',我不希望发生这种情况,我想做的是验证,如果我只输入6位数字,它将引发错误,我将如何做,我尝试了所有可能的情况,但django仍然自动转换它。。。或者可以为forms.DateField创建正则表达式吗?请帮助….

我可以问一下为什么吗?DateTime字段规范化为python DateTime对象,您可以随意设置其格式

无论如何,您可以使用自定义字段来执行此操作

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()

无需编写自定义表单字段即可实现这一点。相反,您可以向字段中添加验证程序,如下所示:

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

这是正确的-您应该让Django将其规范化为Python Datetime对象,然后在以后访问它时按照您希望的方式对其进行格式化。好的,我会清楚地解释它…下面是我的代码:class Info(forms.Form):bday=forms.DateField(input_formats=['%Y%m%d',label='bday',错误消息={'required':'请输入您的出生日期','invalid':'输入的日期无效,应为YYYYMMDD格式'})
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])