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 querysetmetodo 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/mypostselenca tutti i post appartenenti all'utente e /admin/myapp/draftpostpuò 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 AlreadyRegisteredun'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_viewpotrebbero 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.