如果用户没有权限,如何在Django管理界面中隐藏操作?

4
我在我的管理页面中添加了一个操作,允许用户将选定的记录导出到Excel表格中。现在我需要只允许一些用户能够导出数据。我有一个UserProfile模型,它有一个can_export布尔字段。
如何只在django admin中显示“导出到Excel”操作,仅当他们将can_export字段设置为True时?
我尝试在admin.py中找到一种方法来获取请求对象并在设置操作之前进行IF语句,但没有成功。当然,我会收到名称“request”未定义的错误。
if request.user.get_profile().can_export:
    actions = [export_data()]

在执行 IF 语句后会发生什么?继续显示操作还是隐藏操作? - Jerry Meng
它不起作用:名称“request”未定义。 - Austin
你想为你的操作创建一个新的自定义权限怎么样? - Jerry Meng
2个回答

12

来自FineManual (https://docs.djangoproject.com/en/1.5/ref/contrib/admin/actions/):

    class MyModelAdmin(admin.ModelAdmin):
        ...

        def get_actions(self, request):
            actions = super(MyModelAdmin, self).get_actions(request)
            if request.user.username[0].upper() != 'J':
                if 'delete_selected' in actions:
                    del actions['delete_selected']
            return actions

0

只有一些用户的can_exportTrue,您才可以通过覆盖get_actions()来显示export_data管理操作,如下所示:

# "admin.py"

from django.contrib import admin, messages
from .models import UserProfile

@admin.register(UserProfile)
class UserProfileAdmin(ImportExportModelAdmin):
    actions = ["export_data"]

    def get_actions(self, request):
        actions = super().get_actions(request)
        if not request.user.get_profile().can_export:
            del actions["export_data"]
        return actions

    def export_data(self, request, queryset):

        # Export data

        messages.success(request, "Successfully data is exported!")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接