Добрый день. Возможно ответ заезжен, но все таки. Ранее никогда не задумался над тем куда вставлять код с валидацией поля. В случае с формами - в класс Forms для модели. В случае с DRF в модели Serializer.

Но, логичнее всего, как мне кажется, валидацию поля модели производить именно в классе самой модели. Тогда мы имеем валидацию на самом нижнем уровне и не надо будет дублировать код в форме, сериализаторе и т.п

Но кто и каким образом это делает? Например такой пример:

Есть 2 модели:

  • "тип товара"
  • "продажа"
  • В модели "продажа" есть ссылка на модель "тип товара" и кол-во.
  • При продаже мы должны проверить наличие товара на складе (модель "тип товара").

Т.е при задании модели "продажа" должна вызываться валидация, которая проверяет кол-во товара из модели "тип товара".

https://docs.djangoproject.com/en/2.1/ref/validators/#writing-validators подобное решение не подходит, т.к передается только значение поля, но нет информации о других полях (например, в которых мы можем получить ссылку на модель "тип товара").

Метод clean не вызывается сам по себе, переопределять метод save и в нем принудительно вызывать метод clean? В общем, прошу совета, какой best practise для подобных вещей?