关于django模型的验证

时间:2014-09-17 21:59:54

标签: python django django-1.7

我正在关注this在我的模型表上添加自定义验证,并且它正常工作......

我的代码:

from django import forms
from django.utils.translation import ugettext_lazy as _
from datetime import datetime, timedelta

from datetimewidget.widgets import DateWidget

from .models import User

class UserForm(forms.ModelForm):

    class Meta:
        # Set this form to use the User model.
        model = User

        # Constrain the UserForm to just these fields.
        fields = ("birthdate")
        widgets = {
            'birthdate': DateWidget(attrs={'id':"id_birthdate"}, bootstrap_version=3)
        }

    def clean_birthdate(self):
        birthdate = self.cleaned_data["birthdate"]
        min_time = datetime.strptime('1920-01-01', '%Y-%m-%d').date()
        delta = birthdate - min_time
        if  delta <= timedelta(days=0):
            raise forms.ValidationError(_("We don't accept people born before 1920"))
        return birthdate

在1900-01-01之前它会像预期的那样引发错误,但是一旦我进入1899年它就没有。 我不确定是什么导致它。我正在使用DateTimeWidget

我得到的错误是:

year=1899 is before 1900; the datetime strftime() methods require year >= 1900

我检查了比较的结果,它按预期工作(1920年以下的假数)。

简而言之,模型正在更新,并且应该在错误时提出错误。

1 个答案:

答案 0 :(得分:1)

这是python内置strftime函数的限制。它不支持1900年之前的日期。请尝试使用

if birthdate.year < 1920:
    raise forms.ValidationError(_("We don't accept people born before 1920"))