Cómo personalizar el administrador de Django

How to Customise Django Admin

Table of Contents

    Personalizar el Administrador de Django puede hacer que la vida sea mucho más sencilla a la hora de gestionar el contenido de un blog. El Administrador de Django ya es increíblemente útil de fábrica, pero si dedicas un poco de tiempo a adaptarlo a tus necesidades específicas, puedes convertirlo en una herramienta aún más potente. En este artículo, explicaré cómo personalicé el Administrador de Django para un modelo de publicación en un blog que estoy creando, y explicaré las configuraciones que agregué, por qué son útiles y cómo mejoran la experiencia general. También incluiré un fragmento de código para mostrar exactamente cómo se combinan estas configuraciones.

    ¿Por qué personalizar el administrador de Django?

    La interfaz de administración de Django es versátil y excelente para administrar registros de bases de datos sin necesidad de crear un backend completo para cada aplicación. Pero al personalizarla, puede hacerla aún más eficiente para los flujos de trabajo diarios, minimizar errores y mejorar la productividad. En lugar de tener que recorrer campos innecesarios o hacer clic sin parar para encontrar publicaciones específicas, la personalización le permite agilizar las tareas comunes, facilitar el acceso a los datos relevantes e incluso actualizar registros en masa con unos pocos clics. Para un blog con mucho contenido, esto es increíblemente valioso.

    La configuración de administrador clave para el modelo de publicación

    Analicemos en profundidad las configuraciones específicas que utilizo para el modelo de publicaciones en mi blog de Django. El objetivo es hacer que la gestión de publicaciones sea lo más sencilla y eficiente posible. Cada configuración cumple una función para que la interfaz de administración sea más fácil de usar y eficaz.

    visualización de lista

     list_display = ('title', 'status', 'category', 'user', 'created_at', 'updated_at')

    Qué hace: list_display controla qué campos se muestran en la vista de lista principal para el modelo Post. De forma predeterminada, Django puede mostrar la representación str , pero aquí estamos especificando exactamente lo que queremos ver para cada publicación.

    Beneficios: Esta configuración facilita la obtención de una descripción general rápida del título, el estado (publicado o borrador), la categoría, el autor y las marcas de tiempo de cada publicación. Te ahorra tener que hacer clic en cada publicación individualmente para verificar estos detalles, lo que te permite ahorrar mucho tiempo cuando administras una gran cantidad de contenido.

    filtro_de_lista

     list_filter = ('status', 'category', 'created_at', 'updated_at')

    Qué hace : list_filter agrega un filtro de barra lateral a la vista de lista, permitiéndole filtrar publicaciones según campos específicos.

    Beneficios : Esto hace que sea muy fácil limitar la vista a tipos específicos de publicaciones. Por ejemplo, si desea ver solo publicaciones publicadas o publicaciones en una categoría determinada, el filtro le permite hacerlo con un solo clic. Filtrar por fechas de creación y actualización también es útil para encontrar publicaciones según cuándo se agregaron o editaron por última vez.

    campos de búsqueda

     search_fields = ('title', 'body', 'user__username', 'category__name')

    Qué hace : search_fields habilita una barra de búsqueda que te permite buscar publicaciones según campos específicos. Aquí, agregué title , body , el nombre de usuario del autor ( user__username ) y el nombre de la categoría ( category__name ).

    Beneficios : Esta configuración es una gran ayuda cuando estás buscando una publicación en particular pero no recuerdas exactamente dónde está categorizada o cuándo se creó. Puedes buscar por palabras clave en el título o el cuerpo, por autor o por nombre de categoría. Es una forma eficiente de encontrar contenido específico rápidamente.

    campos prepoblados

     prepopulated_fields = {'slug': ('title',)}

    Qué hace : esta configuración rellena automáticamente el campo slug según el title , utilizando la funcionalidad slugify de Django para que sea compatible con las URL.

    Beneficios : Al generar automáticamente el slug, no solo ahorras tiempo, sino que también garantizas la coherencia. Esto reduce los errores (como olvidarse de crear un slug) y mantiene las URL uniformes, lo que es excelente para el SEO. Además, mantiene tu contenido organizado de una manera que facilita la navegación de los usuarios.

    campos de solo lectura

     readonly_fields = ('created_at', 'updated_at')

    Qué hace : readonly_fields evita que los campos se puedan editar en el administrador, lo que es perfecto para marcas de tiempo como created_at y updated_at que no deberían modificarse.generalmente.

    Beneficios : Esto garantiza la integridad de los datos al evitar cambios accidentales en estas marcas de tiempo. Mantiene la coherencia de estos campos y refleja con precisión cuándo se creó o modificó por última vez cada publicación. Cuando trabaja con muchas publicaciones, esta puede ser una forma sencilla pero eficaz de proteger sus datos.

    conjuntos de campos

     fieldsets = ( (None, { 'fields': ('user', 'title', 'slug', 'category', 'body', 'featured_image', 'status') }), ('Timestamps', { 'fields': ('created_at', 'updated_at'), }), )

    Qué hace : fieldsets te permite agrupar campos en el diseño del formulario para una mejor organización. En este caso, agrupé los campos de publicación principales y coloqué las marcas de tiempo en su propia sección.

    Beneficios : Agrupar los campos de esta manera mantiene el formulario organizado y facilita la navegación. En lugar de una larga lista de campos, tiene una agrupación lógica que hace que el formulario sea más legible y fácil de usar, especialmente cuando tiene varios campos en un modelo. Es un pequeño detalle que marca una gran diferencia al administrar una gran cantidad de contenido.

    ordenando

     ordering = ('-created_at',)

    Qué hace : ordering controla el orden predeterminado de los registros en la vista de lista de administración. Al configurar -created_at , ordenamos las publicaciones por fecha de creación en orden descendente, de modo que las publicaciones más recientes aparezcan primero.

    Beneficios : Mostrar las publicaciones más recientes en la parte superior es ideal para un blog porque, por lo general, te interesa más el contenido más nuevo. Es una forma sencilla pero eficaz de garantizar que el contenido más relevante siempre esté en la parte superior de la lista.

    Acciones personalizadas

     actions = ['make_published', 'make_draft'] def make_published(self, request, queryset): queryset.update(status=Post.Status.PUBLISHED) self.message_user(request, "Selected posts have been marked as Published.") make_published.short_description = "Mark selected posts as Published" def make_draft(self, request, queryset): queryset.update(status=Post.Status.DRAFT) self.message_user(request, "Selected posts have been marked as Draft.") make_draft.short_description = "Mark selected posts as Draft"

    Qué hace : Las acciones personalizadas te permiten agregar tus propias operaciones masivas a la vista de lista. Aquí, agregué dos acciones: make_published y make_draft , que actualizan el estado de las publicaciones seleccionadas a Published o Draft .

    Beneficios : Las acciones en bloque son increíblemente útiles para administrar varias publicaciones a la vez. Si necesitas publicar un lote de borradores de publicaciones o mover varias publicaciones al estado de borrador, puedes hacerlo todo a la vez. Es un gran ahorro de tiempo y mantiene eficiente el flujo de trabajo administrativo.

    La clase final personalizada de PostAdmin

     from django.contrib import admin from .models import Post class PostAdmin(admin.ModelAdmin): list_display = ('title', 'status', 'category', 'user', 'created_at', 'updated_at') list_filter = ('status', 'category', 'created_at', 'updated_at') search_fields = ('title', 'body', 'user__username', 'category__name') prepopulated_fields = {'slug': ('title',)} readonly_fields = ('created_at', 'updated_at') fieldsets = ( (None, { 'fields': ('user', 'title', 'slug', 'category', 'body', 'featured_image', 'status') }), ('Timestamps', { 'fields': ('created_at', 'updated_at'), }), ) ordering = ('-created_at',) actions = ['make_published', 'make_draft'] def make_published(self, request, queryset): queryset.update(status=Post.Status.PUBLISHED) self.message_user(request, "Selected posts have been marked as Published.") make_published.short_description = "Mark selected posts as Published" def make_draft(self, request, queryset): queryset.update(status=Post.Status.DRAFT) self.message_user(request, "Selected posts have been marked as Draft.") make_draft.short_description = "Mark selected posts as Draft" # Register the admin class admin.site.register(Post, PostAdmin)

    Terminando

    La personalización de Django Admin tiene como objetivo hacer que el flujo de trabajo sea más fluido y rápido. Al agregar configuraciones como list_display , list_filter y search_fields , puedo acceder rápidamente a la información que necesito. Las acciones en masa y los campos de solo lectura facilitan la administración y la protección de los datos, mientras que los pequeños toques prepopulated_fields y ordering garantizan la coherencia y la organización lógica. Personalizar el administrador para el modelo Post ahorra tiempo y reduce los errores, lo que facilita la gestión del contenido del blog y permite que todo funcione sin problemas.

    Published: 3 weeks, 6 days ago.