我有以下的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