2009-10-22 53 views
5

我正在嘗試使用UserProfile字段過濾Django中的用戶列表...我需要實現一個隊列系統,其中新用戶放入隊列中,直到管理員批准他們。在Django Admin中使用UserProfile字段過濾用戶列表

我簡單地將一個is_in_queue布爾型字段添加到我的UserProfile模型中......但是,當在我的管理區域中顯示用戶列表時,我意識到您不能使用Model的外鍵字段過濾列表(在這種情況下,UserProfile的一個字段)

顯然,list_display項目可以是可調用的,但list_filter不能,所以我可以列出如果用戶在隊列中沒有問題,但管理員必須滾動瀏覽整個用戶列表來發現哪些隊列在隊列中是沒有意義的......只對隊列中的用戶進行過濾(使用userprofile.in_queue)會更實用...

最後,我想添加一個自定義視圖到我的管理區域,該列表只會列出隊列中的用戶,但該自定義視圖不會顯示在管理區域索引頁面上,並且只爲新建立一個全新的AdminSite過濾選項似乎有點過頂...

所以基本上總結一下:我可以根據 UserProfile字段篩選我的用戶列表嗎?如果沒有,我可以添加一個自定義視圖,可從頭版訪問 ,而不必爲此創建全新的 AdminSite?

回答

1

您可能想看看爲您的模型的admin_objects使用自定義管理器。

class UserAdminManager(models.AdminManager): 
""" 
Custom manager for the User model. 
""" 
def get_query_set(self): 
    """ 
    Overwrites the get_query_set to only return Users in the queue. 
    """ 
    return super(UserAdminManager, self).get_query_set().filter(userprofile__queue=True) 

通過覆蓋get_query_set方法,您可以過濾結果。然後,將此分配給User型號的admin_objects屬性。

admin_objects = UserAdminManager() 

一些在我的例子屬性名稱可能是錯誤的,因爲我不知道你的模型設置,但希望你的想法。

您可以通過檢查django文檔並搜索「自定義管理器」來進一步研究。

0

這聽起來對我來說最快和最簡單的選擇是添加一個新的管理視圖到您的應用程序,特別是您的自定義用戶模型。有關詳細信息,請參閱Django admin docs,儘管聽起來您已經知道如何使用管理員了。

一旦管理頁面特定於您的模型,所有您的自定義字段將不再是外鍵。這將使過濾變得容易。

相關問題