widgets personalizados formularios form fields errors avanzados django django-models django-forms django-views

personalizados - post django



¿Separación de entrada de formulario y validación de modelo en Django? (2)

No estoy de acuerdo con la respuesta aceptada. Prefiero usar la validación a nivel de modelo para evitar inconsistencias en los modelos, y la validación a nivel de formulario para cualquier restricción específica del sitio.

Supongamos que tenemos un modelo para eventos, con campos de datetime y datetime para la datetime de inicio y finalización. La validación del modelo nos obligaría a tener una hora de finalización posterior a la hora de inicio. Sin embargo, lo dejaría en la forma de validar que el evento recién creado no está en el pasado. Por lo tanto, si alguna vez tengo que agregar un evento que ocurrió en el pasado, podría usar un formulario específico del administrador que permita fechas en el pasado, o simplemente agregarlo directamente a la base de datos.

Por lo tanto, la validación del modelo solo debe verificar los valores que son evidentemente incorrectos. pero si alguna vez necesitas hacer algo funky (personajes Unicode en un nombre de usuario para un bot, por ejemplo), debería permitirte hacerlo, incluso si solo es a través del administrador o el shell. He leído una respuesta en StackOverflow que sugería usar siempre formularios en el código backend, rellenando campos con código como form["field"] = "value" , para beneficiarse de la validación constante.

¿Es típico separar la validación de entrada de la validación a nivel de modelo en los proyectos de Django? Por ejemplo, validar que un nombre de usuario se ajusta a los criterios de nomenclatura sería la validación de entrada, y la verificación de que el usuario no está ya en la base de datos sería una validación a nivel de modelo.

He estado buscando el código de un compañero de trabajo, y ponen ambos tipos de validación en una clase de formulario (en forms.py). ¿Es esta la configuración típica, o es más común que la validación a nivel de modelo aparezca en el modelo o vista?

¿O hay una mejor manera de acercarse a esto, como usar un ModelForm ? Soy bastante nuevo para Django e intento aprender cuál es el patrón recomendado para esta situación.


Esta es una pregunta muy interesante (para mí).

En mi opinión, todos los códigos de validación se deben mover al código del modelo. Esta es la forma de no romper las reglas comerciales. Cuando el código de validación está en el modelo, no es posible olvidar alguna validación en un formulario nuevo o tener reglas inconsistentes en varias formas.

Me conecto contigo ''Django, plantea un error de validación en el método de guardar método'' relacionado con el tuyo. Debajo de la pregunta, puede ver cómo se mueven las validaciones de códigos de formularios a modelos . Espero que esta breve introducción pueda ayudarte.

¿De qué marco vienes? ¿Cómo se escriben las reglas de validación en su entorno?