Django Guía

7. Administración Profesional

El panel de administración de Django es una de sus "killer features". Con muy poca configuración, obtienes una interfaz CRUD completa y gestionable.

Personalización con ModelAdmin

Para ir más allá del registro básico, usamos clases que heredan de admin.ModelAdmin.

Configuración Común

  • list_display: Qué columnas mostrar en la lista de objetos.
  • list_filter: Filtros laterales (por fecha, booleano, relación).
  • search_fields: Barra de búsqueda (busca en los campos indicados).
  • prepopulated_fields: Rellena campos automáticamente (ideal para slugs).
  • filter_horizontal: Widget de doble caja para selección múltiple (ManyToMany).

Ejemplo (ver src/conceptos_basicos/admin.py)

@admin.register(Curso)
class CursoAdmin(admin.ModelAdmin):
    list_display = ('titulo', 'fecha_inicio', 'es_reciente')
    list_filter = ('fecha_inicio',)
    search_fields = ('titulo', 'descripcion')
    prepopulated_fields = {'slug': ('titulo',)}

Campos Calculados en el Admin

Puedes añadir columnas que no existen en la base de datos pero que son calculadas por métodos del modelo o del Admin.

    @admin.display(boolean=True, description='¿Es reciente?')
    def es_reciente_display(self, obj):
        return obj.es_reciente

Acciones Personalizadas

Puedes agregar acciones al desplegable "Action" para procesar lotes de objetos.

    actions = ['marcar_como_archivado']

    def marcar_como_archivado(self, request, queryset):
        count = queryset.update(activo=False)
        self.message_user(request, f"{count} cursos archivados.")