У меня проблема с методом модели clean()
и базовой проверкой поля. здесь моя модель и метод clean()
.
class Trial(models.Model):
trial_start = DurationField()
movement_start = DurationField()
trial_stop = DurationField()
def clean(self):
from django.core.exceptions import ValidationError
if not (self.movement_start >= self.trial_start):
raise ValidationError('movement start must be >= trial start')
if not (self.trial_stop >= self.movement_start):
raise ValidationError('trial stop must be >= movement start')
if not (self.trial_stop > self.trial_start):
raise ValidationError('trial stop must be > trial start')
Мой метод clean()
проверяет, находятся ли определенные значения в правильном диапазоне. Если пользователь забыл заполнить поле, например. movement_start
, я получаю сообщение об ошибке:
can't compare datetime.timedelta to NoneType
Я удивлен, что получаю эту ошибку, так как исходная функция clean()
должна улавливать эту пропущенную запись (ведь movement_start
- обязательное поле). Итак, как я могу выполнить базовую проверку отсутствующих значений, и моя пользовательская проверка, находятся ли значения в определенных диапазонах? Можно ли это сделать с помощью метода модели clean()
, или мне нужно использовать Forms
?
EDIT1, чтобы сделать его более понятным: trial_start
, movement_start
и trial_stop
- все обязательные поля. Мне нужно написать метод clean()
, который сначала проверяет, что все три поля заполнены, а затем проверьте, находятся ли значения в определенном диапазоне.
Следующий код, например, НЕ работает, поскольку trial_start
может быть пустым. Я хочу избежать необходимости проверять наличие каждого поля - django должен сделать это для меня.
class TrialForm(ModelForm):
class Meta:
model = Trial
def clean_movement_start(self):
movement_start = self.cleaned_data["movement_start"]
trial_start = self.cleaned_data["trial_start"]
if not (movement_start >= trial_start):
raise forms.ValidationError('movement start must be >= trial start')
return self.cleaned_data["movement_start"]
EDIT2 Причина, по которой я хотел добавить эту проверку в метод модели clean()
, заключается в том, что объекты, созданные в оболочке python, будут автоматически проверяться на правильные значения. Форма будет полезна для представлений, но мне нужна проверка значения и для оболочки.