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.
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 campotí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.