2010-09-29 62 views
2

在我的django管理部分,我想顯示不同版本的管理頁面,取決於當前登錄的用戶類型。我可以想到幾種方法可能工作,但還沒有想出如何做任何他們。同一模型的Django管理頁面的多個版本

也許我可以把邏輯放入admin.ModelAdmin來查看當前用戶並動態改變'exclude'字段。那樣有用嗎?或者,也可以根據登錄的用戶運行不同的自定義模板,並根據需要使模板包含/排除字段。

我可以註冊admin.ModelAdmin類的兩個版本,每種類型的用戶都有一個版本,並且可能通過權限限制訪問權限?但是權限系統似乎深信每個模型類的一組權限,所以我不知道如何改變它。

我可以抓住一些用於呈現管理頁面模板的小部件,並將它們包含在我自己的頁面中,這樣做是我需要強大用戶才能完成的一項特定工作。

我可以設置多個AdminSites並通過url/view系統限制對它們的訪問。但後來我不知道如何註冊不同AdminSites的不同Admin.ModelAdmin類。

任何意見,將不勝感激。

回答

謝謝你的提示。以下是我做到了......

def get_form(self, request, obj=None, **kwargs): 
    """This dynamically inserts the "owners" field into the exclude list 
    if the current user is not superuser. 
    """ 
    if not request.user.is_superuser: 
     if self.exclude: 
      self.exclude.append('owners') 
     else: 
      self.exclude = ['owners'] 
    else: 
     # Necessary since Admin objects outlive requests 
     try: 
      self.exclude.remove('owners') 
     except: 
      pass 


    return super(OwnersModelAdmin,self).get_form(request, obj=None, **kwargs) 

回答

1

有在ModelAdmin類這樣的事情提供了不少掛鉤。

一種可能性是重寫get_form方法。這將接受請求以及正在編輯的對象,以便您可以從那裏獲取當前用戶,並根據用戶返回不同的ModelForms。

值得看看ModelAdmin的來源 - 它在django.contrib.admin.options - 看看覆蓋這個或任何其他方法是否可以滿足您的需求。

+0

謝謝。這有幫助。我在上面的問題中包含了我的代碼以供參考。 – Leopd 2010-09-29 18:52:28

相關問題