最佳答案
如何为同一个模型创建多个 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
中访问它。但是,我希望拥有同一模型的多个视图/ModelAdmins。例如,/admin/myapp/post
将列出所有的帖子对象,/admin/myapp/myposts
将列出所有属于用户的帖子,而 /admin/myapp/draftpost
可能列出所有尚未发布的帖子。(这些只是例子,我的实际用例更复杂)
不能为同一个模型注册多个 ModelAdmin (这会导致 AlreadyRegistered
异常)。理想情况下,我希望实现这样的 没有: 将所有内容放入一个 ModelAdmin 类中,并编写自己的“ urls”函数,以根据 URL 返回不同的查询集。
我查看了 Django 源代码,发现像 ModelAdmin.changelist_view
这样的函数可以以某种方式包含在 urls.py 中,但我不确定它是如何工作的。
更新 : 我已经找到了一种做我想做的事情的方法(见下文) ,但是我仍然想听听其他的方法。