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