首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django:管理操作选择

Django:管理操作选择
EN

Stack Overflow用户
提问于 2016-02-02 17:41:03
回答 1查看 1.8K关注 0票数 1

我一直在寻找答案,但遗憾的是,没有。

我试图在django管理下拉列表(其中Delete Selected是)中添加操作,但是在添加了一些操作之后,我添加的操作在其他模型上也显示了,我在文档中遵循了示例,但没有取得成功。

如何限制仅添加到某个模型中的操作?

提前谢谢。

(我使用python 2.7,django 1.8.2)

编辑

我是通过以下方式按用户类型(超级用户与否)筛选选择:

代码语言:javascript
运行
复制
#This a test application only

def fire_employee(modeladmin, request, queryset):
    queryset.update(APP_STATUS=8)
fire_employee.short_description = "Fire/Retire Employee"

class hrd(admin.ModelAdmin):
    model = hired_applicant
    def get_actions(self, request):
        actions = super(hrd, self).get_actions(request)
        if not request.user.is_superuser:
            if 'delete_selected' in actions:
                del actions['delete_selected']
        else:
            self.actions.append(fire_employee)
        return actions
    list_display = ('FIRST_NAME', 'MIDDLE_NAME', 'LAST_NAME', 'EMAIL', 'APPLICATION_DATE', 'APP_STATUS')

admin.site.register(hired_applicant, hrd)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-02 18:38:40

在看到AdminModel类之后,我仍然不确定您是否对所有模型都使用了相同的类。

代码语言:javascript
运行
复制
@admin.site.register(ModelOne, ModelTwo)
class AdminModel(admin.ModelAdmin):

    def get_actions(self, request):
        actions = super(AdminModel, self).get_actions(request)
        if not request.user.is_superuser:
            if 'delete_selected' in actions:
                del actions['delete_selected']
        else:
            self.actions.append(make_published)
            self.actions.append(make_unpublished)
        return actions

如果您只想要针对特定模型的操作,那么只需创建两个单独的ModelAdmin

代码语言:javascript
运行
复制
@admin.site.register(ModelOne)
class AdminModel(admin.ModelAdmin):

    def get_actions(self, request):
        actions = super(AdminModel, self).get_actions(request)
        if not request.user.is_superuser:
            if 'delete_selected' in actions:
                del actions['delete_selected']
        else:
            self.actions.append(make_published)
            self.actions.append(make_unpublished)
        return actions


@admin.site.register(ModelTwo)
class NoActionsModel(admin.ModelAdmin):
    pass

此外,在ModelAdmin上,您应该能够使用has_delete_permission (文档)函数来防止除超级用户之外的所有超级用户。

代码语言:javascript
运行
复制
class AdminModel(admin.ModelAdmin):
    def has_delete_permission(self, request, obj=None):
        return request.user.is_superuser
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35160261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档