Во-первых, вы должны сделать это на уровне формы, см. Очистка и проверка полей, которые зависят друг от друга для получения инструкций о том, как это сделать, это будет выглядеть так:
def clean(self):
cleaned_data = super(YourForm, self).clean()
if cleaned_data['start_time'] > cleaned_data['end_time']:
raise forms.ValidationError(_(u'Start time must be before end time'))
Кроме того, вы можете применить его на низком уровне в методе сохранения или в pre_save сигнале :
from django.db.models import signals
class StartTimeAfterEndTimeException(Exception):
def __init__(self, model):
super(StartTimeAfterEndTimeException, self).__init__(
'Start time %s should not be after end time %s' % (
model.start_time, model.end_time))
def session_force_end_time(sender, instance, **kwargs):
if instance.start_time >= instance.end_time:
raise StartTimeAfterEndTimeException(instance)
signals.pre_save.connect(session_force_end_time, sender=Session)
Но это довольно низкий уровень, поэтому он не удобен для пользователя.