Django Admin - 允许为 is_staff 用户显示模型

Sid*_*thG 5 django django-admin django-admin-actions

is_staff=True我需要在 Django 管理界面中为用户提供一些 Django 模型。我不想为每个用户分配权限或组权限给员工用户。

我需要在类中重写哪种方法ModelAdminBaseModelAdmin或者还有其他更简单的方法吗?我使用的是 Django 1.4 版本

小智 6

class TeacherAdmin(admin.ModelAdmin):
    def has_add_permission(self, request):
        return True
    def has_change_permission(self, request, obj=None):
        return True
    def has_module_permission(self, request):
        return True
Run Code Online (Sandbox Code Playgroud)

has_module_permission 检查模型是否可以在应用程序标签表中列出


mis*_*bah 5

像这样的东西应该有效:

class StaffRequiredAdminMixin(object):

    def check_perm(self, user_obj):
        if not user_obj.is_active or user_obj.is_anonymous():
            return False
        if user_obj.is_superuser or user_obj.is_staff:
            return True
        return False

    def has_add_permission(self, request):
        return self.check_perm(request.user)

    def has_change_permission(self, request, obj=None):
        return self.check_perm(request.user)

    def has_delete_permission(self, request, obj=None):
        return self.check_perm(request.user)
Run Code Online (Sandbox Code Playgroud)

所有 ModelAdmin 都应该继承这个类。例如:

class MyModelAdmin(StaffRequiredAdminMixin, admin.ModelAdmin):
    pass

admin.site.register(MyModel, MyModelAdmin)
Run Code Online (Sandbox Code Playgroud)

请注意,此代码未经测试。

  • 你的代码看起来非常好。但除非我在权限表中明确提供其权限,否则该模型不会列在员工用户的管理模板中。我只是想绕过分配权限/组权限。一旦我在我的管理模板中为员工用户列出了该模型,此代码就会出现。 (3认同)

use*_*764 2

Staff_member_required 装饰器

Staff_member_required(redirect_field_name='next', login_url='admin:login') [来源]

该装饰器用于需要授权的管理视图。用此函数装饰的视图将具有以下行为:

如果用户已登录、是工作人员 (User.is_staff=True) 并且处于活动状态 (User.is_active=True),则正常执行视图。

否则,请求将被重定向到由login_url参数指定的URL,原始请求的路径位于由redirect_field_name指定的查询字符串变量中。例如:/admin/login/?next=/admin/polls/question/3/。

用法示例:

from django.contrib.admin.views.decorators import staff_member_required

@staff_member_required
def my_view(request):
    ...
Run Code Online (Sandbox Code Playgroud)