Cargando



Django - Modelos Dinámicos

En este tutorial veremos como crear modelos dinámicos con nuestro framework Django.


mar 16 2014 06:20
Profesional
mar 18 2014 20:18
En Django las clases son objetos Python, como cualquier otro objeto podemos lograr muchos efectos interesantes en el momento de la ejecución del programa, gracias a que tenemos todas las funciones y métodos de Python disponibles en Django podemos construir clases que puedan generar clases dinámicas.

Crear una clase dinámica puede suponernos algunas ventajas, como por ejemplo crear un modelo desde una clase, generando de esta forma nuevas funcionalidades.

¿Cómo Funcionan las Clases en el Framework?

Para poder llegar al punto de generar modelos dinámicos primero debemos asegurarnos que comprendemos cómo funcionan las clases en Python.

Sabemos que las clases en Python son objetos que pueden ser creados en tiempo de ejecución utilizando el constructor interno type() y recibiendo los detalles de cómo deben ser definidas.

Modelos en Django

Ya que sabemos cómo funcionan las clases en Python, debemos recalcar que los modelos en Django son clases estándar de Python, solo que son declaradas en la forma en que Django las puede utilizar y que sean clases estándar nos permite generar modelos en tiempo de ejecución.

Primera Implementación

Veamos la siguiente imagen con un pequeño código:

django_modelodinamico.jpg


Acá vemos como del framework Django importamos el módulo de modelos, luego creamos un método para hacer la creación de los modelos con el constructor type() que habíamos mencionado en el punto anterior del tutorial.

Sin embargo este acercamiento simplista que hemos aplicado evidentemente no va a funcionar, el problema es que Django espera un diccionario para incluir un módulo con su código.
Vamos a ver ahora un código con el cual resolvemos este problema:

def create_model(name, module_path):
return type(name, (models.Model,), {'__module__': module_path})

Con esta implementación hemos eliminado el primer error que nos salía con el primer ejemplo.

Añadir Opciones de Configuración

Vamos a completar nuestro código de generación de modelos dinámicos, incluyendo la posibilidad que podamos incluir las opciones de configuración de Django, para ello utilizaremos la clase Meta y vamos a sobrescribir su funcionamiento de forma que nuestro nueva implementación nos permita redefinir la forma en que vamos a manejar las opciones, veamos en la siguiente imagen el código ya completado para lograr esto:


django_modelodinamico2.jpg


En este código claramente hemos cambiado algunos aspectos de nuestro código inicial, iniciamos definiendo que el path del módulo es: Django.db.models, de aquí es que vamos a sacar las definiciones iniciales, una vez que esto pasa creamos un diccionario donde le asignamos a __module__ el valor del path que hemos definido.

Luego re-trabajamos la clase Meta, con esto nos ahorramos los posibles problemas que habíamos hablado al inicio de este punto, por último podemos llamar a nuestro método type(), pasando los datos necesarios y que no de error.

Con este nuevo conocimiento que hemos generado ya tenemos una base sólida con la cual podemos interactuar con el código de Django de forma más segura, lo que nos pone en una posición de ventaja para el desarrollo de nuestras aplicaciones y de la generación de modelos de forma dinámica en el tiempo de ejecución de nuestro programa.

¿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