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:
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
. 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 :
2. Por defecto, el administrador de django muestra solo el nombre del objeto en la lista.
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