【问题标题】:How to exclude instances from Admin site in Django如何从 Django 的管理站点中排除实例
【发布时间】:2015-04-20 21:23:24
【问题描述】:

在 Django 中,我创建了另一个单独的管理站点。这是我的 SiteUserAdmin 类的样子:

class SiteUserAdmin(UserAdmin):
form = UserChangeForm
add_form = UserCreationForm

list_display = ('username' ,'email',)

fieldsets = (
    (None,{'fields':('username','email','password')}),('Permissions',{'fields':('is_active','is_admin_user','groups')})
)

在所有用户中,有“is_superuser = True”的超级用户。无论如何要从管理站点的可编辑用户列表中隐藏这些超级用户? 换句话说,我不是从管理站点中排除其他字段,而是在管理站点中隐藏一些用户实例以防止被编辑。

【问题讨论】:

    标签: django


    【解决方案1】:

    直接覆盖get_queryset() 方法怎么样。

    class SiteUserAdmin(admin.ModelAdmin):
        def get_queryset(self, request):
            qs = super(SiteUserAdmin, self).get_queryset(request)
            if request.user.is_superuser:
                return qs
            return qs.filter(is_superuser=False)
    

    文档:https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_queryset

    【讨论】:

      【解决方案2】:

      覆盖get_queryset() 方法:

      class SiteUserAdmin(UserAdmin):
          ...
          def get_queryset(self, request):
              qs = super(SiteUserAdmin, self).get_queryset(request)
              return qs.exclude(is_superuser=True)
      

      【讨论】:

      • 谢谢。但米什巴先回答,所以我必须选择他的答案。
      猜你喜欢
      • 2015-11-29
      • 2013-12-25
      • 2011-08-10
      • 2015-03-21
      • 1970-01-01
      • 2018-02-23
      • 2012-08-28
      • 2014-07-03
      • 2017-12-26
      相关资源
      最近更新 更多