我有以下的Django模型。我的表单用于在时间表上输入时间,并且有start_time和end_time字段。我想添加一个自定义检查以确保start_time在end_time之前或小于end_time,否则如果不提供某些反馈给用户。我试图创建一个自定义的干净方法来做到这一点,但我做错了什么。如何将自定义验证添加到Django modelForm中?
(片断从models.py)
class TimesheetEntry(Model):
WORKED='worked'
SICK='sick'
VACATION='vacation'
TIME_CHOICES=(
(WORKED,'Worked'),
(SICK,'Sick'),
(VACATION,'Vacation'))
timesheet = models.ForeignKey('Timesheet', related_name='entries')
start_time = models.DateTimeField(default=datetime.datetime.now)
end_time = models.DateTimeField(blank=True, null=True)
(片断从forms.py)
class TimesheetEntryForm(forms.ModelForm):
start_time = forms.DateTimeField(widget=forms.SplitDateTimeWidget())
end_time = forms.DateTimeField(widget=forms.SplitDateTimeWidget())
class Meta:
model = TimesheetEntry
exclude = ['timesheet']
def clean(self, *args, **kwargs):
super(TimesheetEntryForm, self).clean(*args, **kwargs)
if self.fields['start_time'] >= self.fields['end_time']:
raise ValidationError("Start Time should be less than End Time")
当我提交表单(该START_TIME是否大于END_TIME小于或更大,我奇怪地得到了两个错误中的一个,没有明显的理由,为什么它每次都不给我同一个错误,它不更新数据库,我可以反复尝试使用相同的数据反复提交相同的数据,我是以下两种错误之一,其概率大概为50%哪一个。我知道这是一个很大的难题,但我希望有人能够发现我正在做的一个明显的错误,并帮助我弄清楚如何纠正这个问题。
TypeError: argument of type 'NoneType' is not iterable
- 或 -
NameError: global name 'ValidationError' is not defined
,应当注意的是,通过该方法去除干净()方法将停止错误,并让我输入新的条目(包括那些导致负小时的总-其是端问题我试图解决)
您是否导入了课程? '从django.core.exceptions import ValidationError' – karthikr 2014-11-08 22:03:51