Cargando



Django - MultiWidget

Este tutorial se concentrará en explicar los MultiWidgets los cuales contienen mayor riqueza de funcionalidades y contenidos aumentando así la satisfacción tanto del usuario como del desarrollador.


abr 19 2014 02:04
Profesional
abr 23 2014 08:24
Hablando de widgets, debemos saber que estos son un puente entre el código HTML y los campos de Django; estos tienen que ver mucho en la forma en que vamos a controlar el comportamiento del HTML en nuestros formularios y por ende en nuestra aplicación.

Tal es el control, que podemos aplicar algunas técnicas de programación en las cuales nos permitiremos almacenar y procesar datos de diferentes widgets y dárselos a Django como si fuese un dato de una sola fuente.

Dividir los datos entre varios Widgets

El funcionamiento de esto se puede lograr utilizando el método render() del widget, entonces podemos tener un campo y al procesarlo lo dividimos en varios inputs HTML, cada uno conteniendo una pieza del valor que necesitamos almacenar.

Ejemplo
Un ejemplo puede ser el campo DateTime, este pudiéramos dividirlo en un campo que capture solo la fecha y otro que capture la hora, pero al momento de almacenarlo en Base de Datos los deberíamos unir y de esta forma tenemos un campo completo pero en la parte del usuario está dividido.


MultiWidget

Como el ejemplo que indicamos anteriormente es algo bastante tedioso ya que tendríamos que ocuparnos de escribir demasiadas rutinas y métodos que nos ayuden con la validación, en Django ya se ha pensado en esto y tenemos unas utilidades que nos hacen gran parte de este trabajo.

MultiValueField
Del lado de los campos tenemos MultiValueField que nos ayuda con la validación de los datos, su limpieza y la comparación contra cada uno de los campos que construyen al compuesto; lo único que debemos hacer aquí es indicarle cuales son los campos que harán la composición y como debemos comprimirlos para que sean usables dentro del código Python.


Este método está hecho para trabajar en conjunto con MultiWidget quien se encargará de traducir a HTML todo lo que hemos definido previamente en la clase del formulario.

Veamos a continuación un la imagen de un código de ejemplo donde hemos implementado estos conceptos:


Aquí vemos como primero hemos definido una clase que hereda de MultiWidget, en ella indicamos que vamos a tener dos campos InputText asociados y establecemos un método decompress() que es el que va a separar los valores para su presentación.

En la siguiente clase establecemos un poco más de elementos, primero le indicamos que debe heredar de MultiValueField luego le indicamos que widget debe utilizar y por supuesto le vamos a indicar que use el widget ya definido anteriormente.

Luego en su método __init__ le indicamos los tipos de campos que llevará y por último definimos el método compress(), vemos que aparte del self recibe también un parámetro data_list, en este vamos a pasar la lista de los datos que deben ser combinados y los regresamos como una tupla, aprovechamos también de validarlos para evitar recibir datos erróneos que puedan atentar contra nuestra aplicación.

Con esto finalizamos este tutorial viendo como tenemos una herramienta bastante avanzada que nos permite personalizar un poco más nuestros formularios en nuestra aplicación en tan solo sencillos pasos.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X