2016-02-02 109 views
0

我一直在尋找答案,但可悲的是,沒有。Django:管理員行動選擇

我嘗試添加在Django管理下拉的動作(如Delete Selected是),但增加了一些動作之後,我也加入了行動顯示了其他車型,我已按照documentation的例子,但沒有運氣

如何限制我添加到某個模型的操作?

在此先感謝。

(我用蟒2.7,django的1.8.2)

EDIT

我過濾通過由用戶類型的選擇(超級用戶或不):

#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) 
+0

你能擴展上面的代碼來顯示其他的'AdminModel'類 – Nathaniel

+0

編輯過,是否也可以在'fire_employee'中使用queryset.save()而不是'.update()'? –

+0

您可以循環查詢集對每個模型調用.save()對於queryset中的obj:obj.APP_STATUS = 8; obj.save()' – Nathaniel

回答

0

後看到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 

如果你想只對特定型號的動作,你只希望通過has_delete_permission兩個單獨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你應該能夠避免所有,但超級用戶( docs)功能

class AdminModel(admin.ModelAdmin): 
    def has_delete_permission(self, request, obj=None): 
     return request.user.is_superuser 
+0

這正是我所做的,當我訪問管理員中的其他模型時,問題就開始了,選擇依然存在 –

+0

你有多個'admin.site.register'調用嗎? 'admin.site.register(hired_applicant,hrd)'...'admin.site.register(other_model,hrd)' – Nathaniel

+0

我發現我的代碼出了什麼問題,我需要在''' ModelAdmin'因爲沒有它,它會將動作添加到所有模型 –