Ver índice de contenidos del libro

6.3. Personalizar la interfaz de administración

Puedes personalizar el aspecto y la forma en que la interfaz de administración se comporta de varias maneras. En esta sección sólo vamos a cubrir algunas de ellas relacionadas con nuestro modelo Libro. El Capítulo 17 descubre la personalización de la interfaz de administración en detalle.

Como estamos ahora, la lista de cambio de nuestros libros sólo muestra la cadena de representación del modelo que agregamos con el método __unicode__

Esto funciona bien sólo para algunos libros, pero si tuviéramos cientos o miles de libros, se volvería tan difícil como encontrar una aguja en un pajar. Sin embargo, fácilmente podremos agregar algunas columnas, funciones de búsqueda y filtros y a esta interfaz. Cambia la declaración de Admin como sigue:

class Book(models.Model):
    title = models.CharField(maxlength=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()
 
    class Admin:
        list_display = ('title', 'publisher', 'publication_date')
        list_filter = ('publisher', 'publication_date')
        ordering = ('-publication_date',)
        search_fields = ('title',)

Estas cuatro líneas de código cambian dramáticamente la interfaz de nuestra lista, como se muestra en la figura 6-8.

Página de lista de cambios modificada

Figura 6.8 Página de lista de cambios modificada

Cada una de estas líneas indica a la interfaz de administración que construya diferentes piezas de la interfaz:

  • La opción list_display controla que columnas aparecen en la tabla de la lista. Por defecto, la lista de cambios muestra una sola columna que contiene la representación en cadena de caracteres del objeto. Aquí podemos cambiar eso para mostrar el título, el editor y la fecha de publicación.
  • La opción list_filter crea una barra de filtrado del lado derecho de la lista. Estaremos habilitados a filtrar por fecha (que te permite ver sólo los libros publicados la última semana, mes, etc.) y por editor.

    Puedes indicarle a la interfaz de administración que filtre por cualquier campo, pero las claves foráneas, fechas, booleanos, y campos con un atributo de opciones choices son las que mejor funcionan. Los filtros aparecen cuando tienen al menos 2 valores de dónde elegir.

  • La opción ordering controla el orden en el que los objetos son presentados en la interfaz de administración. Es simplemente una lista de campos con los cuales ordenar el resultado; anteponiendo un signo menos a un campo se obtiene el orden reverso. En este ejemplo, ordenamos por fecha de publicación con los más recientes al principio.
  • Finalmente, la opción search_fields crea un campo que permite buscar texto. En nuestro caso, buscará el texto en el campo título (entonces podrías ingresar Django para mostrar todos los libros con "Django" en el título).

Usando estas opciones (y las otras descritas en el capítulo 17) puedes, con sólo algunas líneas de código, hacer una interfaz de edición de datos realmente potente y lista para producción.