Django-extensions es un paquete de Django que añade nuevas funcionalidades a un proyecto. Estas van desde nuevos comandos, a los que una vez te acostumbras ya no puedes vivir sin ellos, hasta extensiones del admin o nuevos campos del ORM. 

En APSL lo usamos en prácticamente todos nuestros proyectos en Django, y es el segundo paquete que normalmente añadimos al requirements.txt, justo después del mismísimo Django. Muchos de los comandos de django extensions ya los damos por descontados y suponemos que están presentes en cualquier proyecto.

Para empezar a usarlo, basta con instalar el paquete y añadir django_extensions al INSTALLED_APPS de tu aplicación.

Estas son algunas de mis funcionalidades favoritas, y que uso con más frecuencia.

shell_plus. Shell plus es igual que el comando shell de Django, con la diferencia de que importa automáticamente  todos los modelos declarados en todos los módulos del proyecto. Esto parece una tonteria de funcionalidad, hasta que has escrito mil veces “from models import” en el shell de Python.

create_command. Crea el template de un management command en la aplicación que se indique, incluyendo la creación de la estructura de directorios necesaria, si esta no existe.

dumpscript. Funciona igual que dumpdata, pero exporta los datos de la aplicación como un script Python, usando el ORM de Django. Tiene otros, pero el uso principal que le he dado ha sido para migrar datos desde MySQL o SQLite a PostgreSQL, donde hay que lidiar con problemas de integridad referencial, longitudes de campos o formatos de fechas. Con dumpscript es rápido, sencillo y funciona. Para una aplicación con un mínimo de complejidad y con cualquier otro método que he probado, debes eliminar uno de los 3 (como mínimo).

Field Extensions. Además de comandos extra, django-extensions también ofrece algunos campos para la creación de modelos. Algunos de los que utilizo con frecuencia incluyen:

  • AutoSlugField. Es igual que el SlugField, pero si el slug ya existe, le añade un número hasta que sea único. Muy útil si tienes que generar slugs únicos de forma automática.

  • EncryptedCharField. Un CharField que encripta y desencripta su contenido de forma transparente al grabar o leer de la base de datos. Algún día, y puede que ese día nunca llegue, alguien te pedirá que guardes un password en un modelo...

Además de las que he mencionado, django-extensions tiene muchas otras funcionalidades. Os animo a que exploreis todo lo que ofrece, que es mucho. Para mi es imprescindible en mis proyectos desde hace años.