У меня есть модель модели Django. Моя форма предназначена для ввода времени в расписании, и есть поля start_time и end_time. Я хочу добавить пользовательскую проверку, чтобы удостовериться, что start_time предшествует или меньше, чем end_time, или, если вы не предоставите некоторую обратную связь пользователю, если это не так. Я пытаюсь создать собственный чистый метод для этого, но я делаю что-то неправильно.Как добавить пользовательскую проверку в модель Django?
(фрагмент из 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, я странно получаю одну из двух ошибок, без видимых причин, почему она не дает мне одну и ту же единицу каждый раз. Она не обновляет db, и я могу неоднократно пытаться отправить одну и ту же форму с теми же данными снова и снова и даст я имею одну из следующих двух ошибок с примерно 50% -ой вероятностью: к которому. Я знаю, что это маленький кусочек большой головоломки, но я надеюсь, что кто-то сможет заметить явную ошибку, которую я делаю, и помочь мне разобраться, как исправить это.
TypeError: argument of type 'NoneType' is not iterable
-ИЛИ-
NameError: global name 'ValidationError' is not defined
следует отметить, что при удалении методы очистки() от метода остановят ошибки и позвольте мне вводить новые записи (в том числе в результате отрицательный часы полные, которая является конечной проблемой, я пытаюсь решить)
Вы импортировали класс? 'from django.core.exceptions import ValidationError' – karthikr