Как говорит @stefanw, удобнее для пользователя проверять чистый метод формы.
Этого достаточно, если вы уверены, что нет и никогда не будет другого способа изменить значение. Но так как вы редко можете быть в этом уверены, если согласованность базы данных важна, вы можете добавить еще одну проверку (в дополнение к форме), одну из:
- Более простой и независимый от базы данных способ заключается в методе сохранения модели, как сказал @ umnik700. Обратите внимание, что это по-прежнему не мешает другим пользователям базы данных (другое приложение или интерфейс администратора) создавать несовместимое состояние.
Чтобы быть «полностью» уверенным, что база данных согласована, вы можете добавить ограничение уровня базы данных. Например. вы можете создать миграцию с помощью RunSQL и SQL, что-то вроде (не проверено):
migrations.RunSQL('ALTER TABLE app_event ADD CONSTRAINT chronology CHECK (start_date > end_date);')
(не проверено). Это может зависеть от базы данных, что, конечно, является недостатком.
В вашем примере это, вероятно, не стоит (неправильное время начала / окончания просто выглядит немного странно, но влияет только на одно несовместимое событие), и вам не нужны ручные изменения схемы. Но это полезно в тех случаях, когда последовательность важна.
РЕДАКТИРОВАТЬ : Вы также можете просто сохранить время начала и продолжительность вместо времени начала и окончания.