Description
Probablemente empezaste creando una aplicación de Django que podía presumir de "limpia". Tus modelos tienen un par de métodos añadidos, con lógica sencilla. Tus vistas hacen consultas simples y devuelven templates con un contexto razonable.
Con el tiempo, los modelos empiezan a cambiar, necesitas hacer vistas que devuelven contextos con datos más complejos, aumenta la cantidad de métodos en los modelos, las vistas empiezan a implementar lógica y, ahora que lo piensas, puedes reutilizar esa función, así que la sacas a un módulo de utilidades, quizá lo decides bautizar como controlador.
Después de todas esas fantásticas nuevas features que has conseguido implementar, tienes modelos de cientos de líneas, lógica desparramada en varios ¨controladores" que importas en tantos módulos que, cada vez que creas uno nuevo, optas por copiar y pegar los import de siempre. Ah, y cada vista tienen más lógica que tu trabajo fin de carrera. ¿En cual de los "controladores" estaba esa función que te da una lista de ids y nombres de usuarios con datos sobres sus vehículos y sus casas? ¿En el controlador de usuarios, el de vehículos, el de casas o el controlador de controladores?
No te preocupes, hay varias soluciones. Nosotros te proponemos la que utilizamos en StyleSage, basada en una clara división de responsabilidades entre modelos, proxy models, managers y vistas. Verás como lo encuentras todo a la primera, ¡Y sin dependencias circulares!
Presentación disponible en http://slides.com/hectorpablos/adelgazando-modelos-django