Personalizar el sitio de administración
Parte de la sección Modelos y el panel de administración del Journey de Django de Coddy. Lección 21 de 23.
La lista de libros del sitio de administración tiene una columna, el __str__ de cada libro, y ninguna forma de encontrar nada. Una clase ModelAdmin, registrada con el decorador, cambia eso. Para un Loan con una ForeignKey book:
@admin.register(Loan)
class LoanAdmin(admin.ModelAdmin):
list_display = ["book", "friend", "lent_on", "returned"]
search_fields = ["friend", "book__title"]
list_filter = ["returned", "lent_on"]list_display elige las columnas; una columna ForeignKey muestra el __str__ de la fila relacionada, y un campo de muchos a muchos no puede ser una columna. search_fields añade un cuadro de búsqueda. Para buscar en una ForeignKey, escribe el nombre de un campo del otro modelo después de dos guiones bajos, book__title: book por sí solo es un enlace, no texto, y hace que la búsqueda falle. list_filter añade una barra lateral de filtros.
El decorador hace lo mismo que admin.site.register(Loan, LoanAdmin). Registra cada modelo una sola vez: registrarlo por segunda vez detiene el sitio con AlreadyRegistered.
Desafío
FácilEn books/admin.py, asigna a Book un BookAdmin en lugar de registrarlo sin personalizar. La lista de libros debe tener:
- columnas para
title,author,year,genreyis_read - un cuadro de búsqueda que encuentre libros por título o por el nombre del autor
- una barra lateral que filtre por
genreeis_read
Vuelve a ejecutar createsuperuser, inicia sesión y busca herbert en Books: Children of Dune y Dune.
Pruébalo tú mismo
from django.contrib import admin
from .models import Author, Book, Tag
admin.site.register(Book)
admin.site.register(Author)
admin.site.register(Tag)
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Modelos y el panel de administración
3Páginas desde la base de datos
Una lista desde la base de datosUna página para cada libroPractica por tu cuenta: Playground de Django