如何为同一模型创建多个ModelAdmin,每个ModelAdmin以不同的方式定制并链接到不同的URL?
假设我有一个叫Posts的Django模型.默认情况下,该模型的管理视图将列出所有Post对象.
我知道我可以通过设置LIST_DISPLAY等变量或覆盖ModelAdmin中的queryset
方法,以各种方式定制页面上显示的对象列表,如下所示:
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
上访问该文件.但是,我希望同一模型有多个视图/模型管理员.e、 G/admin/myapp/post
将列出所有帖子对象,/admin/myapp/myposts
将列出属于用户的所有帖子,/admin/myapp/draftpost
可能列出所有尚未发布的帖子.(这些只是示例,我的实际用例更复杂)
您不能为同一模型注册多个ModelAdmin(这会导致AlreadyRegistered
异常).理想情况下,我希望实现这个without,将所有内容都放到单个ModelAdmin类中,并编写我自己的"URL"函数,以根据URL返回不同的查询集.
我已经看过Django源代码,我看到像ModelAdmin.changelist_view
这样的函数可以以某种方式包含在我的urls.py中,但是我不确定它到底是如何工作的.
Update:我已经找到了一种做我想做的事情的方法(见下文),但我还是想听听其他的方法.