2009-10-29 116 views
7

我將如何使用自定義管理器來擴展默認用戶模型?用戶模型的Django自定義管理器

我的應用程序有許多用戶類型,將使用內置的組模型進行定義。因此,用戶可能是客戶,員工等等。這將是理想的能夠做到這樣的事情:

User.clients.filter(name='Test') 

讓所有的客戶名稱爲測試。我知道如何使用用戶定義模型的自定義管理器來做到這一點,但我不知道如何去實現User模型,同時仍然保留所有烘焙好的東西,至少不需要修改django源代碼本身是一個無無....

回答

-1

你可以用戶資料此

AUTH_PROFILE_MODULE = 「accounts.UserProfile」

當用戶簡檔模式已經 定義並且在指定的這樣, 每個用戶對象都會有一個方法 - get_profile( ) - 它返回與該用戶關聯的用戶配置文件模型 的 實例。

或者您可以編寫自己的authenticate backend。在設置中添加它

+1

-1用戶配置文件適合添加額外的數據屬性,但它們根本無助於這種情況。而你的最後一塊代碼很簡單(你測試過了嗎?),你不能像這樣添加一個管理器到類中,你必須調用add_to_class方法,這樣它才能正確設置。 – 2009-10-29 14:42:56

+0

它有助於使用配置文件模塊,而不是用戶。 UserProfile.user_clients.filter(name ='Test') 但是我的最後一塊真的壞了。謝謝。我在編輯我的答案。 – Oduvan 2009-10-29 21:16:27

16

是的,您可以將自定義管理器直接添加到User類。這是monkeypatching,它確實使您的代碼更容易維護(有人試圖找出您的代碼可能不知道用戶類獲得該自定義管理器,或他們可以找到它的地方)。在這種情況下,它是相對無害的,因爲您實際上並沒有重寫User類的任何現有行爲,只是添加了一些新內容。

from django.contrib.auth.models import User 
User.add_to_class('clients', ClientsManager()) 

如果你使用Django 1.1+,你也可以子類用戶用proxy model;不會影響數據庫,但可以讓您在沒有monkeypatch的情況下附加額外的管理器。

+0

有幫助,謝謝。 – 2010-01-14 10:12:01

+2

@JoseJose請將此答案標爲正確 – sberder 2012-09-17 07:11:25

+0

非常普通,謝謝 – nemesisdesign 2013-06-21 18:00:55