Comment puis-je créer plusieurs ModelAdmin pour le même modèle, chacun étant personnalisé différemment et lié à des URL différentes ?
Disons que j'ai un modèle Django appelé Posts. Par défaut, la vue d'administration de ce modèle listera tous les objets Post.
Je sais que je peux personnaliser la liste des objets affichés sur la page de diverses manières en définissant des variables telles que list_display ou en remplaçant la fonction queryset
dans mon ModelAdmin comme suit :
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)
Par défaut, il est accessible à l'URL /admin/myapp/post
. Cependant, j'aimerais avoir plusieurs vues/ModelAdmins du même modèle, par exemple /admin/myapp/post
énumérerait tous les objets postaux, et /admin/myapp/myposts
énumérerait tous les messages appartenant à l'utilisateur, et /admin/myapp/draftpost
pourrait répertorier tous les messages qui n'ont pas encore été publiés. (ce ne sont que des exemples, mon cas d'utilisation réel est plus complexe)
Vous ne pouvez pas enregistrer plus d'un ModelAdmin pour le même modèle (cela entraîne une erreur d'enregistrement). AlreadyRegistered
exception). Idéalement, j'aimerais obtenir ceci sans en mettant tout dans une seule classe ModelAdmin et en écrivant ma propre fonction 'urls' pour retourner un queryset différent en fonction de l'URL.
J'ai jeté un coup d'œil aux sources de Django et je vois des fonctions comme ModelAdmin.changelist_view
qui pourrait être inclus dans mon urls.py, mais je ne sais pas exactement comment cela fonctionnerait.
Mise à jour : J'ai trouvé une façon de faire ce que je veux (voir ci-dessous), mais j'aimerais connaître d'autres façons de procéder.