¿Qué es Django Admin?
Django Admin es una aplicación que viene instalado por defecto cuando creamos un proyecto en Django, para poder emplear el mismo, necesitamos de otras aplicaciones que ya vienen con nuestro framework; como:
'account', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles',
Todas estas aplicaciones las podemos ver y administrar en el archivo global de configuraciones del proyecto. Por ejemplo; para lograr la autenticación en nuestra aplicación de Django Admin empleamos la app llamada django.contrib.auth,
y esto es una parte de emplear frameworks como Django, y es que podemos reutilizar componentes, módulos, aplicaciones... fácilmente e incluso el mismo framework hace lo mismo.
Acceso al panel de administración
De forma predeterminada, django usa /admin url para el panel de administración. Para acceder al panel de administración, primero debemos ejecutar nuestro proyecto.
Nota: Si no sabe cómo ejecutar el servidor o cómo crear un proyecto en Django, le recomiendo que lea mi artículo en la cual damos los primeros pasos con Django.
En primer lugar, abramos nuestro archivo urls.py. Este es el archivo que contiene enrutamiento de URL a nivel de proyecto. Cuando creamos nuevas páginas web o API, debemos agregar estas URL a urls.py para el enrutamiento.
Eche un vistazo al archivo urls.py a nivel de proyecto.
Como puede ver en la imagen de arriba, he marcado la línea 20 con un rectángulo rojo. Aquí, el primer parámetro dice cuál es nuestra URL y el segundo parámetro dice que esta URL será el panel de administración de nuestro proyecto.
Después de ejecutar nuestro servidor con éxito, abramos nuestro navegador y vayamos a este sitio web http://127.0.0.1:8000/admin
Nota: si ejecuta su proyecto en una URL diferente, no olvide cambiar esta área.
Qué nos permite exactamente Django Admin?
Django Admin nos ofrece una interfaz configurable mediante clases para poder crear procesos CRUD sencillos simplemente mediante un esquema de clases; en otras palabras, con tan solo definir una clase, algunos atributos como por ejemplo indicar, modelo, que campos queremos que sean administrables en los formularios, campos para el listado, filtros, etc; ya con esto Django Admin crea de manera automática un CRUD completo para estos campos:
Personalizar clases para crear los CRUD con Django Admin
from django.contrib import admin from .models import Comment # Register your models here. admin.site.register(Comment)
Y listo, en esta entrada vimos un ejemplo sencillo de cómo podemos emplear y personalizar Django Admin para nuestro proyecto, pero recuerda que puedes obtener más información de cómo puedes personalizar tus procesos CRUD mediante esta potente aplicación; puedes seguir viendo la documentación oficial o seguir mi curso de Django en el cual vemos un poco de todo con este famoso framework.
Personalizar Django Admin
Django Admin tiene un gran nivel de personalización en cómo queremos mostrar los datos, aplicar filtros, búsquedas, que datos queremos administrar, etc; para estos tenemos que definir la serie de características implementadas desde una clase como la siguiente:
# Register your models here.
class CategoryAdmin(admin.ModelAdmin):
pass
#caracteristicas
admin.site.register(Comment, CategoryAdmin)
Como casi todo en Django, no es más que una clase de Python que hereda de una clase interna al framework en la cual aplicamos las características; luego, la registramos mediante site.register() en la cual indicamos el modelo y la clase admin/características.
Veamos algunas características comunes que podemos aplicar.
Definir columnas para listados
Si quieres colocar columnas específicas desde el listado, basta con definir una tupla llamada list_display con las columnas que quieres mostrar:
# Register your models here.
class CategoryAdmin(admin.ModelAdmin):
list_display = ('id','text')
admin.site.register(Comment, CategoryAdmin)
Campos de búsqueda
Podemos especificar por cuales campos de nuestra tabla va a buscar el listado:
class CommentAdmin(admin.ModelAdmin):
list_display = ('id','text')
search_fields = ('text', 'id')
Navegación por fechas
Justo debajo de la barra búsqueda, hay enlaces de navegación para navegar a través de una jerarquía de fechas:
class CommentAdmin(admin.ModelAdmin):
list_display = ('id','text')
search_fields = ('text', 'id')
date_hierarchy = 'date_posted'
Ordenado
Podemos especificar el campo de ordenación en el listado:
class CommentAdmin(admin.ModelAdmin):
list_display = ('id','text')
search_fields = ('text', 'id')
date_hierarchy = 'date_posted'
ordering = ('date_posted',)
Filtrados
También podemos agregar filtros en el listado:
class CommentAdmin(admin.ModelAdmin):
list_display = ('id','text')
search_fields = ('text', 'id')
date_hierarchy = 'date_posted'
ordering = ('date_posted',)
list_filter = ('id', 'date_posted')
Campos editables
Desde el listado, es posible que puedes modificar campos:
class CommentAdmin(admin.ModelAdmin):
list_display = ('id','text')
search_fields = ('text', 'id')
date_hierarchy = 'date_posted'
ordering = ('date_posted',)
list_filter = ('id', 'date_posted')
list_editable = ('text',)
Indicar campos administrables
Según el modelo con el cual estés trabajando, puede que te interese definir solamente algunos campos administrables (para crear y editar):
class CommentAdmin(admin.ModelAdmin):
// ***
fields = ('text',)
Excluir campos administrables
También podemos excluir los campos administrables:
class CommentAdmin(admin.ModelAdmin):
// ***
#fields = ('text',)
exclude = ('text',)
Registrar clases mediante un decorador
Otra forma en la cual podemos registrar las clases, es mediante un decorador:
@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):
list_display = ('id','text')
//***
Registrar el modelo para las etiquetas, categorías y elementos
Ya que vimos lo fácil que es usar Django Admin para modelos sencillos, vamos a usarlo para registrar las relaciones de categorías y tipos:
elements/admin.py
from django.contrib import admin
from .models import Type, Category
@admin.register(Type, Category)
class CategoryTypeAdmin(admin.ModelAdmin):
list_display = ('id','title')
Y el de element:
@admin.register(Element)
class ElementAdmin(admin.ModelAdmin):
list_display = ('id','title','category','type')
fields = ('title','slug','description','price','category','type')
Agrupar los campos de gestión
Mediante tuplas, es posible agrupar campos de formulario para colocar en una sola línea, por ejemplo, si queremos colocar el título y el slug en una sola línea, al igual que el tipo y categoría, tenemos:
@admin.register(Element)
class ElementAdmin(admin.ModelAdmin):
list_display = ('id','title','category','type')
fields = (('title','slug'),'description','price',('category','type'))
Y queda como:
- Andrés Cruz
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter