Herramientas de objetos en administrador de Django

31 de Mayo de 2019

Las plantillas de Django cuentan con un diseño modular que nos facilita personalizarlo a conveniencia, hoy conoceremos un bloque que se encuentra en dos pantallas del administrador(object-tools-items), dichas pantallas son el listado de objetos y el formulario de edición de los mismos.


Indice:

¿Qué necesitamos?Al igual que en nuestro pasado articulo unicamente necesitaremos el repositorio con el proyecto base para hacer esto de la manera más sencilla posible. Cabe destacar que el proyecto base se va actualizando con cada articulo para cumplir con los requerimientos mínimos, sin olvidar que aun con las actualizaciones el mismo repositorio debe seguir siendo útil para los artículos pasados.


Se usó: Django 2.2.1 y Python 3.7


Agregar herramientas

Because of the modular design of the admin templates, it is usually neither necessary nor advisable to replace an entire template. It is almost always better to override only the section of the template which you need to change.

Agregar "herramientas" en cualquiera de las pantallas mencionadas es bastante sencillo, solo basta con remplazar las plantillas correctas, para el caso del Listado de objetos sería change_list_object_tools.html mientras que para el Formulario de edición ocupamos reemplazar change_form_object_tools.html.

Si ya curioseaste las plantillas podrás ver que lo único que necesitamos es agregar un elemento <li> ... </li>.

Para nuestro ejemplo usaremos el Formulario de edición ya que en esta pantalla contamos con variables que vale la pena mencionar. Lo que haremos sera agregar la opción Buscar en Wikipedia.

Recuerda copiar el archivo change_form_object_tools.html dentro de nuestra carpeta templates/admin/ y agregar las modificaciones en este archivo, no queremos modificar el archivo original ya que esos cambios no permanecerán en nuestro proyecto.

Una de las variables que mencionaba anteriormente es original que contiene la información del objeto que estamos modificando, lo que nos da la libertad de pasar todos los parámetros que necesitemos. En este caso estamos usando el el objeto directo que nos devolverá el valor definido en __str__()

La variable opts se encuentra en las vistas/views del administrador de Django y en ella se guarda la información de todos los objetos con los atributos app_label y model_name que correspondan al modelo actual. En este ejemplo la utilizamos para saber si el modelo actual es Author y, si es el caso, mostrar nuestro Buscar en wikipedia.

En esta misma pantalla contamos además con dos herramientas listas para usarse: Ver en sitio e Histórico.

Herramientas predefinidas


Antes de mover las cosas a nuestro antojo siempre es pertinente conocer lo que ya existe en Django para evitar "reescribir" la rueda o en su defecto arruinarla. En cada objeto se carga de base la herramienta Histórico, existe también una segunda que podemos apreciar al editar las FlatPages, Ver en sitio.

Activar/Desactivar "Ver en sitio"

One place Django uses get_absolute_url() is in the admin app. If an object defines this method, the object-editing page will have a “View on site” link that will jump you directly to the object’s public view, as given by get_absolute_url().

Esta herramienta es en realidad solo un link que en el caso de las FlatPages nos redirige a la visualización de la página, para activarla en cualquier objeto basta con agregar get_absolute_url() en el modelo correspondiente.

Si quisiéramos activarlo en un modelo al cual no tenemos acceso basta con agregar view_on_site() en el ModelAdmin correspondiente.

Un buen ejemplo sería redirigir a una pagina de perfil para los usuarios, para ello es necesario remover el modelo User del sitio de administrador para posteriormente agregarlo de nuevo.

Es necesario aclarar que en el código de arriba se está usando (UserAdmin) en lugar de (admin.ModelAdmin) para conservar toda la configuración del UserAdmin original, no olvides importar el UserAdmin original from django.contrib.auth.admin import UserAdmin.

Activar/Desactivar "Histórico"

Esta herramienta nos permite visualizar el historial de modificaciones de cada objeto.

Si por alguna razón desean deshabilitarla lo único que tienes que hacer es quitar las siguientes lineas:


Conclusión:

Si bien siempre me he sentido atraído por la idea de trabajar desde cero también sé que eso no sería posible sin comprender como es que trabajan herramientas como Django, es por ello que al usarlas debemos tratar de entender hasta el más mínimo detalle y no hay mejor forma que acercarse a su código y no tener miedo de jugar con él.

Personalmente recomiendo el libro Lightweight Django como un buen acercamiento para entender còmo funciona un proyecto hecho en Django. Si no puedes adquirir el libro tambien puedes explorar el codigo de los ejemplos aqui.

Comentarios:

Tu correo es necesario para evitar spam, este jamás se mostrará a terceros.

Se enviará correo únicamente para validar que eres dueño del mismo.

Los comentarios aparecerán en la página en cuanto sean aprobados por el administrador