Как я могу создать более одного ModelAdmin для одной и той же модели, каждый из которых настроен по-разному и связан с разными URL-адресами?
Скажем, у меня есть модель Django, называемая Posts. По умолчанию в представлении администратора этой модели будут перечислены все объекты Post.
Я знаю, что могу настроить список объектов, отображаемых на странице различными способами, задав переменные типа list_display или переопределив метод queryset
в моем ModelAdmin так:
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)
По умолчанию это будет доступно по адресу URL /admin/myapp/post
. Однако я хотел бы иметь несколько представлений /ModelAdmins той же модели. e.g /admin/myapp/post
будет перечислять все объекты post, а /admin/myapp/myposts
будет перечислять все записи, принадлежащие пользователю, а /admin/myapp/draftpost
может отображать все опубликованные сообщения. (это всего лишь примеры, мой фактический прецедент более сложный)
Вы не можете зарегистрировать более одного ModelAdmin для одной и той же модели (это приводит к исключению AlreadyRegistered
). В идеале я бы хотел достичь этого без, помещая все в один класс ModelAdmin и записывая свою собственную функцию URL-адресов, чтобы возвращать другой запрос в зависимости от URL-адреса.
Я посмотрел на источник Django, и я вижу такие функции, как ModelAdmin.changelist_view
, которые могут быть каким-то образом включены в мой urls.py, но я точно не знаю, как это будет работать.
Обновление. Я нашел один способ сделать то, что хочу (см. ниже), но мне все же хотелось бы услышать другие способы сделать это.