为了账号安全,请及时绑定邮箱和手机立即绑定

Django管理员中同一模型的多个ModelAdmins /视图

Django管理员中同一模型的多个ModelAdmins /视图

桃花长相依 2019-10-05 11:04:03
如何为同一个模型创建一个以上的ModelAdmin,每个ModelAdmin进行不同的自定义并链接到不同的URL?假设我有一个称为Posts的Django模型。默认情况下,此模型的admin视图将列出所有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。例如,/admin/myapp/post将列出所有帖子对象,并/admin/myapp/myposts列出属于该用户的/admin/myapp/draftpost所有帖子,并可能列出尚未发布的所有帖子。(这些只是示例,我的实际用例更加复杂)您不能为同一模型注册多个ModelAdmin(这将导致AlreadyRegistered异常)。理想情况下,我希望不将所有内容放入单个ModelAdmin类中并编写自己的“ urls”函数以根据URL返回不同的查询集来实现此目的。我看了看Django的源代码,发现ModelAdmin.changelist_view我的urls.py中可能包含这样的函数,但是我不确定它是如何工作的。更新:我已经找到一种实现自己想要的方式(见下文),但是我仍然想听听其他实现方式。
查看完整描述

3 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

保罗·斯通的答案是绝对好的!只需添加一下,对于Django 1.4.5,我需要继承自定义类admin.ModelAdmin


class MyPostAdmin(admin.ModelAdmin):

    def queryset(self, request):

        return self.model.objects.filter(id=1)


查看完整回答
反对 回复 2019-10-05
  • 3 回答
  • 0 关注
  • 1337 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信