Personalizar la interfaz de administración de Django

El administrador de Django por defecto es una GUI altamente receptiva, que ofrece varias funciones y una aplicación CRUD general para ayudar a los desarrolladores y usuarios. Además, el administrador de Django se puede personalizar para satisfacer las necesidades de uno, como mostrar campos en la página de inicio de la tabla, etc. En este artículo, discutiremos cómo mejorar la interfaz de administración de Django.

La estructura del proyecto se parece a:
customize-django-admin-interface

Vamos a crear una aplicación llamada estado que tenga un modelo con el mismo nombre (estado). Cuando registramos la aplicación en admin.py, se muestra como.

estado/modelo.py

from django.db import models
from django.utils import timezone
  
class State(models.Model):
    name = models.CharField(max_length = 50)
    is_active = models.IntegerField(default = 1,
                                   blank = True,
                                    null = True,
                                    help_text ='1->Active, 0->Inactive', 
                                    choices =(
                                    (1, 'Active'), (0, 'Inactive')
                                    ))
    created_on = models.DateTimeField(default = timezone.now)
    updated_on = models.DateTimeField(default = timezone.now,
                                    null = True, 
                                    blank = True
                                    )
    def __str__(self):
        return self.name
  
    class Meta:
        db_table = 'state'

estado/admin.py:

from django.contrib import admin
from .models import State
  
admin.site.register(State)

Verifíquelo en la interfaz de administración de Django
django-admin-interface
. Ahora, personalicemos la administración de Django de acuerdo con las opciones disponibles.

Personalizar la interfaz de administración de Django

1. Cambiar el nombre del modelo:
si desea cambiar el nombre del modelo que se encuentra aquí, abra el archivo model.py y agregue el atributo verbose_name en la meta sección.

estado/modelo.py

from django.db import models
from django.utils import timezone
  
class State(models.Model):
    name = models.CharField(max_length = 50)
    is_active = models.IntegerField(default = 1,
                                   blank = True,
                                    null = True,
                                    help_text ='1->Active, 0->Inactive', 
                                    choices =(
                                    (1, 'Active'), (0, 'Inactive')
                                    ))
    created_on = models.DateTimeField(default = timezone.now)
    updated_on = models.DateTimeField(default = timezone.now,
                                    null = True, 
                                    blank = True
                                    )
    def __str__(self):
        return self.name
    class Meta:
        db_table = 'state'
        # Add verbose name
        verbose_name = 'State List'

Producción :
change model title

2. Por defecto, el administrador de django muestra solo el nombre del objeto en la lista.

admin-listing-page

Uno puede mostrar datos de múltiples campos del modelo. Agregue algunas líneas de código en su archivo admin.py.

estado/admin.py:

from django.contrib import admin
from .models import State
  
class StateAdmin(admin.ModelAdmin):
    list_display = ('name', 'active', 'created_on')
  
    def active(self, obj):
        return obj.is_active == 1
  
    active.boolean = True
  
admin.site.register(State, StateAdmin)

Producción :

3. De forma predeterminada, solo hay una opción que es la opción de eliminación.
Se pueden agregar más opciones en el menú desplegable Acción:

estado/admin.py:

from django.contrib import admin
from django.contrib import messages
from .models import State
  
class StateAdmin(admin.ModelAdmin):
    list_display = ('name', 'active', 'created_on')
  
    def active(self, obj):
        return obj.is_active == 1
  
    active.boolean = True
  
    def make_active(modeladmin, request, queryset):
        queryset.update(is_active = 1)
        messages.success(request, "Selected Record(s) Marked as Active Successfully !!")
  
    def make_inactive(modeladmin, request, queryset):
        queryset.update(is_active = 0)
        messages.success(request, "Selected Record(s) Marked as Inactive Successfully !!")
  
    admin.site.add_action(make_active, "Make Active")
    admin.site.add_action(make_inactive, "Make Inactive")
  
admin.site.register(State, StateAdmin)

Producción:

4. Deshabilitar la opción Eliminar:

estado/admin.py:

from django.contrib import admin
from django.contrib import messages
from .models import State
  
class StateAdmin(admin.ModelAdmin):
    list_display = ('name', 'active', 'created_on')
  
    def active(self, obj):
        return obj.is_active == 1
  
    active.boolean = True
  
    def make_active(modeladmin, request, queryset):
        queryset.update(is_active = 1)
        messages.success(request, "Selected Record(s) Marked as Active Successfully !!")
  
    def make_inactive(modeladmin, request, queryset):
        queryset.update(is_active = 0)
        messages.success(request, "Selected Record(s) Marked as Inactive Successfully !!")
  
    admin.site.add_action(make_active, "Make Active")
    admin.site.add_action(make_inactive, "Make Inactive")
  
    def has_delete_permission(self, request, obj = None):
        return False
  
admin.site.register(State, StateAdmin)

Producción:

5. Eliminar la opción Agregar:

estado/admin.py:

from django.contrib import admin
from .models import State
  
class StateAdmin(admin.ModelAdmin):
    list_display = ('name', 'active', 'created_on')
  
    def active(self, obj):
        return obj.is_active == 1
  
    active.boolean = True
  
    def has_add_permission(self, request):
        return False
  
admin.site.register(State, StateAdmin)

Publicación traducida automáticamente

Artículo escrito por vikas_shri_2015 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *