2010-02-23 12 views
12

La tabla de lista de cambios Django es realmente genial - buscar, filtrar, de selección múltiple acciones etc.Reutilización Django Lista de cambios Fuera del administrador del sitio

Estoy construyendo un motor personalizado para una aplicación y sigo darse cuenta: esto es exactamente lo que necesito, debería volver a usarlo.

¿Alguien ha tenido alguna experiencia al usar la lista de cambios fuera de la aplicación de administración de Django?

Lo que yo he llegado al momento, es algo como esto:

from profile.admin import ProfileAdmin 
from django.contrib.admin.sites import AdminSite 
from profile.models import Profile 
profile_admin = ProfileAdmin(Profile, AdminSite()) 
return profile_admin.changelist_view(request) 

Me gustaría saber si alguien ha tenido experiencia con esto o puede sugerir una alternativa.

+0

¿Se las arregló para reutilizar el Changelist o adaptarlo de alguna manera? – guival

+0

Tratando de hacer lo mismo, me encantaría escuchar el enfoque final – dave4jr

Respuesta

9

ChangeList como clase es realmente genial y completo. Sin embargo, es difícil de usar fuera del contexto del monolito AdminSite.

La clase ChangeList toma 12 parámetros necesarios __init__(). Solo ese número debería alejarte y doblemente así cuando te des cuenta de que todos provienen del Admin changelist_view(). Si bien esos parámetros se han mantenido igual desde Django 1.1, cambiaron de 1.0 y es tanto un objeto interno de Django, no confiaría en que su interfaz sea estable.

La mejor manera de utilizar la lista de cambios - o específicamente para obtener la lista de cambios beneficia (que es lo que está después) - es utilizar el método changelist_view(). Usar eso por supuesto requiere usar/subclasificar AdminSite. Esto vale la pena hacerlo, o al menos probarlo. Parece que ya eres.

Ese método toma el parámetro request y le gusta /(?P<app_label>%s)/(?P<model_name>%s)/ en la ruta URL que lo señala.

de excavación en el código:

  • ChangeList vidas en django.contrib.admin.views.main
  • changelist_view() es un método en django.contrib.admin.options.ModelAdmin

UPDATE: En Django 1.4, tanto ChangeList y changelist_view() cambiado por la adición de uno y dos nuevos parámetros respectivamente.

Cuestiones relacionadas