CRUD genérico en Django

En esta empresa intentamos hacer siempre software de calidad, por eso estamos al tanto de los frameworks de desarrollo más potentes. Uno de los que usamos es Django. Este framework nos da gran libertad para hacer desarrollos ágiles, robustos, y completamente a medida de las necesidades del cliente. También nos ofrece la posibilidad de realizar cambios posteriores sin tener que rehacer casi toda la aplicación.
En esta entrada vamos a ver como agilizar nuestros desarrollos creando un CRUD abstracto para poder usarlo con cualquiera de nuestros modelos. Esto es muy útil porque no necesitamos hacer las vistas de Create, Remove, Update y Detail para cada uno de nuestros modelos.

Partiremos de un estado en el que ya se tienen creados los modelos, que serán: ModelA, ModelB, y ModelC. Vamos a utilizar las vistas basadas deb clases de ‘django.views.generic’. Y suponemos que ya tenemos hecha la plantilla base de nuestra aplicación.

En este post podrás leer

Preparación de los modelos

Una vez que tenemos nuestros definidos nuestros modelos tenemos que darle una funcionalidad extra.

Obtener los nombres de los campos que vamos a mostrar en los listados. Normalmente en los listados de objetos vemos sólo una serie de campos, no todos. Vamos a ver un ejemplo. Como se puede ver se trada de un método estático, ya que pertenecerá al modelo y no a una instancia de este.

Obtener los datos para cada objeto que vamos a mostrar. Lo ideal es que se correspondan con los campos que hemos puesto en el método anterior.

Obtener las URLs que vamos a necesitar para nuestro CRUD. La obtenciñon de la URL de Create y List, serán métodos estáticos ya que no dependen de ninguna instancia.

Obtener el nombre del modelo para saber sobre qué modelo estamos aplicando la vista.

Obtener todos los atributos y su valor de un objeto

Ya tenemos unos modelos que son capaces de proporcionarnos toda la información que necesitamos para crear el CRUD

Create

Para casi cualquier vista de creación lo que necesitamos es una plantilla para pintar el formulario. En este caso vamos a usar una muy sencilla pero que va a servir para todos los modelos. Suponemos que en la plantilla de la que herede esta plantilla, tendremos un bloque para el contenido, que en este caso será el formulario. Esta plantilla la meteremos en algún sitio al que puedan acceder todas las aplicaciones en ‘templates/generic/form.html’.

Y ahora vamos a hacer una vista que herede de CreateView.

Le decimos que use la plantilla del formulario anterior. En title ponemos el nombre que le hemos dado a la clase. y en el formulario le añadimos los botones de aceptar y cancelar. Este último nos llevará otra vez a la lista de todos los objetos.

Por último asignaremos la URLS. En el ejemplo veremos como usar esta vista para todos nuestros modelos.

Remove

Esta vista la vamos a usar desde la lista de objetos, por lo que no usaremos una plantilla intermedia para pedir la confirmación para eliminar el objeto. La idea es que se puedan acceder a todas las acciones de una forma rápida en la lista de objetos.

Como no tenemos formulario intermedio lo que hacemos es directamente pasar los mismos parámetros del get al post para que se elimine el objeto.

Y aquí las URLs.

Update

La vista de Update va a compartir el mismo formulario que la de create, por lo que no vamos a hacer otra plantilla nueva. Y va a ser prácticamente igual que la de create, sólo que en este caso vamos a heredar de UpdateView. Se podría hacer en una única clase, pero el update suele ser más complejo y se podrían tener que cambiar relaciones y otros elementos, por lo que así se consigue más libertad.

Y las URLs.

Detail

La vista de detalle es muy sencilla y muy clara. Lo que vamos a hacer es mostrar los campos con sus respectivos valores. A partir de aquí se puede hacer que la vista sea más atractiva, ya que en este caso no va a tener nada de funcionalidad. Volvemos a crear una plantilla que sea accesible desde todas las aplicaciones, por ejemplo en ‘templates/generic/detail.html’.

Esta plantilla la rellenaremos desde la siguiente vista:

Y ahora sólo nos queda añadir las URLs.

List

Por último vamos a agrupar toda la funcionalidad anterior en un vista de lista desde donde podremos administrar todos los objetos. Creamos una plantilla, por ejemplo ‘templates/generic/list.html’.

Y para generar los datos necesarios:

Ya sólo nos falta añadir las URLs y podremos administrar todos nuestros objetos de una forma sencilla, eficaz e intuitiva para los usuarios de nuestra aplicación.

Y aquí termina esta entrada. Esperamos que sea de utilidad. Y si tenéis alguna duda, estamos disponibles para aclararlas.

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

.Estás en el punto de partida?

Contacta con nosotros y cuéntanos tu proyecto.

Mapa de ubicación dentro de la sección método App&Web
Estamos en:

C/ Gracia, 12 1ª Planta Granada (18004) Granada

623 02 64 34

 contacto@appandweb.es

Follows
Shares
Share This
¿Necesitas ayuda?