Come posso creare più ModelAdmin per lo stesso modello, ognuno personalizzato in modo diverso e collegato a URL diversi?
Diciamo che ho un modello Django chiamato Posts. Per impostazione predefinita, la vista dell'amministratore di questo modello elencherà tutti gli oggetti Post.
So di poter personalizzare l'elenco di oggetti visualizzati sulla pagina in vari modi impostando variabili come list_display o sovrascrivendo il queryset
metodo nel mio ModelAdmin in questo modo:
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)
Per impostazione predefinita, questo sarebbe accessibile all'URL /admin/myapp/post
. Tuttavia, vorrei avere più viste / ModelAdmins dello stesso modello. ad esempio /admin/myapp/post
, elenca tutti gli oggetti dei post e /admin/myapp/myposts
elenca tutti i post appartenenti all'utente e /admin/myapp/draftpost
può elencare tutti i post che non sono stati ancora pubblicati. (questi sono solo esempi, il mio caso d'uso reale è più complesso)
Non è possibile registrare più di un ModelAdmin per lo stesso modello (ciò comporta AlreadyRegistered
un'eccezione). Idealmente, vorrei raggiungere questo obiettivo senza mettere tutto in una singola classe ModelAdmin e scrivere la mia funzione "urls" per restituire un set di query diverso a seconda dell'URL.
Ho dato un'occhiata alla fonte Django e vedo che funzioni del genere ModelAdmin.changelist_view
potrebbero essere in qualche modo incluse nel mio urls.py, ma non sono sicuro di come funzionerebbe.
Aggiornamento : ho trovato un modo per fare ciò che voglio (vedi sotto), ma mi piacerebbe comunque sentire altri modi per farlo.