update tutorial serializermethodfield queryset framework foreign create python django serialization django-models django-rest-framework

python - tutorial - partial update django rest framework



¿Por qué Django Rest Framework desalienta la validación a nivel de modelo? (1)

Hay dos problemas principales con el modelo "full_clean". El primero es técnico. Hay un par de casos en los que full_clean no se llama en absoluto. Por ejemplo, lo omitirá cuando realice un queryset.update ().

La segunda es que si tiene una lógica de negocios compleja, que es la razón por la que tendrá un full_clean, es probable que deba hacer la validación en la lógica de negocios, no ir a los modelos para validar. Cada capa debe ser responsable de su propia consistencia y la capa de almacenamiento, es decir, los modelos, no deben preocuparse por la capa empresarial.

Otra cosa en la que puedo pensar es que se llamará a full_clean una vez que tenga un modelo que viene después de que el serializador haya estado haciendo su validación. En este punto, las cosas empiezan a complicarse porque tiene una validación de dos pasos con una creación de objeto en el medio. Si está utilizando un serializador anidado, es posible que se quede bloqueado aquí porque no podrá crear modelos anidados antes de que se haya guardado el modelo principal, lo que hará que la llamada de limpieza completa sea aún más desordenada. . Es difícil averiguar cuándo y qué objeto debe validarse con su full_clean y puede estar seguro de que habrá muchas quejas de los usuarios cuando anulen la actualización / limpieza y descubran que no se ha solicitado el full_clean todos los modelos Esto comienza a convertirse en un dolor de cabeza total y preferimos mantener las cosas más simples y explícitas.

Los serializadores de Django Rest Framework no llaman a Model.clean al validar los serializadores de modelos. La explicación dada es que esto conduce a una "separación de preocupaciones más limpia", de las notas de la versión de Django Rest Framework 3.0 :

Diferencias entre la validación de ModelSerializer y ModelForm.

Este cambio también significa que ya no usamos el método .full_clean() en las instancias del modelo, sino que realizamos toda la validación explícitamente en el serializador. Esto proporciona una separación más limpia y garantiza que no haya un comportamiento de validación automática en las clases de ModelSerializer que no se pueda replicar fácilmente en las clases regulares de Serializer.

Pero, ¿qué preocupaciones tienen los autores de Django Rest Framework que intentan separar?

Supongo que están diciendo que una instancia modelo no debería preocuparse por su propia validez. Si ese es el caso no entiendo por qué.