日期验证给出错误“strftime'未定义”

时间:2013-06-06 04:55:32

标签: python django django-models django-forms django-templates

我试图用两种不同的输入形式验证日期。我不知道我做错了。

forms.py

class ReportForm(forms.ModelForm):   
    manual_date = forms.DateField(input_formats=['%m/%d/%Y','%d/%m/%Y'],
                      widget=forms.DateInput(attrs={'size':'15','id':'datepicker'},format=["%m/%d/%Y","%d/%m/%Y"]))
    manual_time = forms.TimeField(input_formats=['%H:%M','%I:%M %p'],
                      widget=forms.TimeInput(attrs={'size':'8','class':'time_field'},format=["%H:%M","%I:%M %p"]))

    def clean(self):
        cleaned_data = self.cleaned_data
        manual_date = cleaned_data.get('manual_date')
        manual_time = cleaned_data.get('manual_time')

        if manual_date != strftime('%d %b %Y') and strftime('%b %d %Y'):
            raise ValidationError('Enter a valid date')
        return cleaned_data

模板:

{{ ReportForm.manual_date }}{{ ReportForm.manual_date.errors }}
{{ ReportForm.manual_time }}{{ ReportForm.manual_time.errors }}

我收到此错误“全局名称'strftime' is not defined",我当然不知道我做的方法是对的。

我想验证两种格式的日期和时间。如果用户选择dd/mm/yyyy格式,它应该以该格式验证,如果所选日期是mm/dd/yyyy,它应该以该格式验证日期。请指导我如何在clean()方法中实现。

2 个答案:

答案 0 :(得分:1)

strftime是在datetime对象上找到的一种方法,可以将它们转换为字符串。

您的错误非常简单:未定义。如果你打开一个python shell并输入Royal,你会发现错误吗?同样的事情。


在调用clean时,已经构造了datetime对象。此时没有输入类型验证 - 它已经被转换为日期时间。

答案 1 :(得分:0)

在引发错误时使用forms.ValidationError而不仅仅是ValidationError,请参阅https://docs.djangoproject.com/en/dev/ref/forms/validation/