Django
Configurando el Admin
Creando nuestro primer superusuario
El superadmin es un usuario que tiene todos los permisos activados
python manage.py createsuperuser
Nos pedirá nombre de usuario, email y contraseña
Corremos nuestro server de desarrollo:
python manage.py runserver
Vamos al administrador: http://127.0.0.1:8000/admin/
Administrador de django
Hacer nuestra app de encuestas administrable
En encuestas/admin.py
from django.contrib import admin
from encuestas.models import Pregunta
admin.site.register(Pregunta)
admin
Clickeando en "Preguntas" obtenemos
Clickeando en "Que te pasa?" obtenemos
Personalizando el form
Editamos el archivo admin.py, para que quede:
from django.contrib import admin
from encuestas.models import Pregunta
class PreguntaAdmin(admin.ModelAdmin):
fields = ['pub_date', 'texto_pregunta']
admin.site.register(Pregunta, PreguntaAdmin)
Personalizando el form
Agrupamos en fieldsets
from django.contrib import admin
from encuestas.models import Pregunta
class PreguntaAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['texto_pregunta']}),
(u'Información de fecha', {'fields': ['pub_date']}),
]
admin.site.register(Pregunta, PreguntaAdmin)
Personalizando el form
Hacemos los fieldsets colapsables
from django.contrib import admin
from encuestas.models import Pregunta
class PreguntaAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['texto_pregunta']}),
(u'Información de fecha', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
admin.site.register(Pregunta, PreguntaAdmin)
Personalizando el form
Agregamos objetos relacionados
from django.contrib import admin
from encuestas.models import Eleccion, Pregunta
# ...
admin.site.register(Eleccion)
Personalizando el form
Agregamos mejor los objetos relacionados
from django.contrib import admin
from encuestas.models import Eleccion, Pregunta
class EleccionInline(admin.StackedInline):
model = Eleccion
extra = 3 # Aqui ndicamos la cantidad de "slots" que hay de elecciones, el
# usuario puede agregar más si lo necesita
class PreguntaAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['texto_pregunta']}),
(u'Información de fecha', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [EleccionInline] # Le indicamos a Django que las elecciones se
# cargan desde el admin de Pregunta
admin.site.register(Pregunta, PreguntaAdmin)
Personalizando el form
Optimizamos el espacio de los objetos relacionados
class EleccionInline(admin.TabularInline):
#...
Personalizando el listado
Podemos personalizar las columnas de los listados, con campos o con nuestros métodos personalizados
class PreguntaAdmin(admin.ModelAdmin):
# ...
list_display = ('texto_pregunta', 'pub_date',
'fue_publicada_recientemente')
Personalizando el listado
Para los campos personalizados, debemos indicar cómo se debería ordenar, en el models.py:
class Pregunta(models.Model):
# ...
def fue_publicada_recientemente(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
fue_publicada_recientemente.admin_order_field = 'pub_date'
fue_publicada_recientemente.boolean = True
fue_publicada_recientemente.short_description = 'Publicada recientemente?'
También podemos agregar un sistema de filtros, desde nuestro admin.py:
list_filter = ['pub_date']
Y hasta un sistema de búsquedas:
search_fields = ['texto_pregunta']
Mas personalización del admin?
El listado del administrador ya trae paginado, de 100 items por página.
Change list pagination, search boxes, filters, date-hierarchies, y column-header-ordering funcionan en conjunto como esperas que funcionen.
Más detalles y opciones de administración en la documentación oficial del admin de django
Otras personalizaciones del admin
Para cambiar los títulos, desde el urls.py principal:
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, include, url
from django.contrib import admin
...
# Texto para poner al final del <title> de cada página.
admin.site.site_title = u'Administración del sitio cursoweb'
# Texto a poner en los <h1> de todas las páginas.
admin.site.site_header = u'Administrador de Curso Web'
# Texto a poner arriba de la página de index del admin
admin.site.index_title = u'Panel de control de Curso Web'
Incluso más personalizaciones del Admin
Se pueden personalizar las plantillas copiando las originales a nuestra carpeta de plantillas y personalizando esas. Desde el settings.py:
TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]
Crear esa carpeta (en el raíz del proyecto) y copiar las plantillas originales que se quieran modificar. Para encontrarlas correr:
python -c "
import sys
sys.path = sys.path[1:]
import django
print(django.__path__)"
Las otras plantillas de mi sitio?
- Django busca por defecto en la carpeta de cada aplicación una carpeta /templates
- Si no la encuentra, busca en las rutas que hemos indicado en TEMPLATE_DIRS
- Como ésta es una aplicación simple, pondremos nuestras plantilla en la ruta general de TEMPLATE_DIRS
Personalizando el index del admin
- El archivo a modificar es admin/index.html
- Por defecto recorre todas las aplicaciones en INSTALLED_APPS y, de acuerdo a los permisos del usuario, va mostrandolas
Otros admins personalizados
Algunas herramientas útiles
Enlaces útiles
Django - configurando el admin
By Guillermo Nuñez
Django - configurando el admin
- 4,482