我正在关注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年以下的假数)。
简而言之,模型正在更新,并且应该在错误时提出错误。
答案 0 :(得分:1)
这是python内置strftime函数的限制。它不支持1900年之前的日期。请尝试使用
if birthdate.year < 1920:
raise forms.ValidationError(_("We don't accept people born before 1920"))