我一直在寻找答案,但遗憾的是,没有。
我试图在django管理下拉列表(其中Delete Selected
是)中添加操作,但是在添加了一些操作之后,我添加的操作在其他模型上也显示了,我在文档中遵循了示例,但没有取得成功。
如何限制仅添加到某个模型中的操作?
提前谢谢。
(我使用python 2.7,django 1.8.2)
编辑
我是通过以下方式按用户类型(超级用户与否)筛选选择:
#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)
发布于 2016-02-02 18:38:40
在看到AdminModel
类之后,我仍然不确定您是否对所有模型都使用了相同的类。
@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
类
@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
(文档)函数来防止除超级用户之外的所有超级用户。
class AdminModel(admin.ModelAdmin):
def has_delete_permission(self, request, obj=None):
return request.user.is_superuser
https://stackoverflow.com/questions/35160261
复制相似问题