Подтвердить что ты не робот

Почему Django Rest Framework препятствует проверке уровня модели?

Сериализаторы Django Rest Framework не вызывают Model.clean при проверке сериализаторов модели. Приведенное объяснение состоит в том, что это приводит к "более чистому разделению проблем", из примечаний к выпуску Django Rest Framework 3.0:

Различия между валидацией ModelSerializer и ModelForm.

Это изменение также означает, что мы больше не используем метод .full_clean()на экземплярах модели, но вместо этого выполнить все проверки явно сериализатор. Это обеспечивает более чистое разделение и обеспечивает нет автоматического контроля над классами ModelSerializer которые также не могут быть легко воспроизведены на обычных классах Serializer.

Но какие проблемы авторы Django Rest Framework пытаются отделить?


Я предполагаю, что они говорят, что экземпляр модели не должен заботиться о своей собственной действительности. Если в этом случае я не понимаю, почему.

4b9b3361

Ответ 1

Есть две основные проблемы с моделью "full_clean". Первый - технический. Есть несколько случаев, когда full_clean не звонит вообще. Например, вы обойдете его, когда вы выполните queryset.update().

Во-вторых, если у вас сложная бизнес-логика, которая обычно является причиной того, что у вас будет full_clean, вероятно, вы должны сделать валидацию в бизнес-логике, а не перейти к моделям для проверки. Каждый слой должен отвечать за собственную консистенцию, а уровень хранения - то есть модели - не должен заботиться о бизнес-уровне.

Еще одна вещь, о которой я могу думать, это то, что full_clean будет вызван, как только у вас появится модель, которая появляется после того, как сериализатор выполняет свою проверку. В этот момент все начинает становиться беспорядочным, потому что у вас есть двухэтапная проверка с созданием объекта между ними. Если вы используете вложенный сериализатор, вы можете застрять здесь, потому что вы не сможете создавать вложенные модели до того, как будет сохранена основная модель, что сделает весь чистый вызов еще более запутанным - некоторые объекты будут созданы, другие не будут, Трудно понять, когда и какой объект должен быть проверен с помощью full_clean, и вы можете быть уверены, что у пользователей будет много жалоб, когда они переопределяют обновление/очистку и выясняют, что full_clean не был вызван все модели. Это начало становиться полной головной болью, и мы предпочитаем держать вещи проще и более явными.