¿Cómo puedo crear más de un ModelAdmin para el mismo modelo, cada uno personalizado de manera diferente y vinculado a diferentes URL?Modelo múltipleAdmins/views para el mismo modelo en Django admin
Digamos que tengo un modelo de Django llamado Publicaciones. Por defecto, la vista de administración de este modelo listará todos los objetos Post.
Sé que puedo personalizar la lista de objetos que se muestran en la página de varias maneras mediante el establecimiento de variables como list_display o reemplazando el método queryset
en mi ModelAdmin así:
class MyPostAdmin(admin.ModelAdmin):
list_display = ('title', 'pub_date')
def queryset(self, request):
request_user = request.user
return Post.objects.filter(author=request_user)
admin.site.register(MyPostAdmin, Post)
Por defecto, esta sería accesible en la URL /admin/myapp/post
. Sin embargo, me gustaría tener vistas múltiples/ModelAdmins del mismo modelo. Por ejemplo, /admin/myapp/post
enumeraría todos los objetos de publicación y /admin/myapp/myposts
mostraría todas las publicaciones que pertenecen al usuario, y /admin/myapp/draftpost
podría enumerar todas las publicaciones que aún no se han publicado. (estos son solo ejemplos, mi caso de uso real es más complejo)
No se puede registrar más de un ModelAdmin para el mismo modelo (esto da como resultado una excepción AlreadyRegistered
). Idealmente me gustaría lograr esto sin poniendo todo en una sola clase ModelAdmin y escribiendo mi propia función 'urls' para devolver un queryset diferente dependiendo de la URL.
He echado un vistazo a la fuente de Django y veo funciones como ModelAdmin.changelist_view
que podrían incluirse de alguna manera en mi urls.py, pero no estoy seguro de cómo funcionaría.
Actualización: He encontrado una forma de hacer lo que quiero (ver más abajo), pero aún me gustaría escuchar otras formas de hacerlo.
esto es asombroso. No sabía que un modelo de proxy podía registrarse en el sitio de administración. esto realmente me ayudará mucho. –
También necesitaba registrar los mismos modelos dos veces en django admin y los modelos de proxy parecen funcionar. Pero encontré un problema con el sistema de permisos. Vea aquí: http://code.djangoproject.com/ticket/11154 – bjunix
También es una buena idea cambiar el administrador predeterminado en lugar del conjunto de consulta ModelAdmin. Entonces el comportamiento del modelo proxy es consistente incluso fuera del administrador. – bjunix