默認情況下,Django在名爲「id
」的每個模型上創建主鍵字段,類型爲AutoField
。在我的模型中,我重寫此操作以使用「primary_key
」屬性將自定義UUIDField
作爲主鍵。我還希望django.contrib.auth
中的User
型號具有UUIDField
作爲主鍵,但如果不更改User
型號源代碼,似乎不可能。django用戶模型和自定義主鍵字段
有沒有建議的方法來解決這個問題?
默認情況下,Django在名爲「id
」的每個模型上創建主鍵字段,類型爲AutoField
。在我的模型中,我重寫此操作以使用「primary_key
」屬性將自定義UUIDField
作爲主鍵。我還希望django.contrib.auth
中的User
型號具有UUIDField
作爲主鍵,但如果不更改User
型號源代碼,似乎不可能。django用戶模型和自定義主鍵字段
有沒有建議的方法來解決這個問題?
如果不更改用戶模型源代碼,這似乎不可能。
正確。除非您願意更改(或更換)User
,否則沒有辦法。
這樣做的一種方法是爲每個User
實例附加一個UserProfile
。每個User
應該完全有一個UserProfile
。然後,您可以將您的UUIDField
添加到配置文件。您仍然必須執行自定義查詢,將UUIDField
翻譯爲id
。
如果您不喜歡名稱UserProfile
,您可以適當地重命名它。關鍵是您與User
有一對一的關係。
使用Django 1.5的發佈,認證後端現在支持自定義用戶模型:
https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model
電子郵件字段可以用來作爲用戶名,字段和primary_key參數可以在其上進行設置:
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=254, unique=True, db_index=True, primary_key=True)
USERNAME_FIELD = 'email'
我認爲情況就是這樣。謝謝。 – Andrew 2010-09-05 17:40:03