2013-12-17 59 views
1

我有一個Django應用程序,需要一個額外的字段(一個多圖映射到一個Book類),我通過擴展AbstractUser來做到這一點。使用Django的自定義用戶模型(Django1.6)

如果你有Django的用戶模型完全滿意,你只是想添加一些額外的個人資料信息,你可以簡單地繼承django.contrib.auth.models.AbstractUser並添加自定義配置文件字段。此類提供默認用戶的完整實現作爲抽象模型。

class User(AbstractUser): 
    entitledBooks = models.ManyToManyField(Book) 

我增加了模型在我settings.py

AUTH_USER_MODEL = 'BookRServer.User' 

但是我怎麼創建一個用戶(程序)?

user = User.objects.create_user()不起作用。

+2

你說的「不工作」是什麼意思?請跟蹤堆棧跟蹤?另外,你是從你的模型導入用戶嗎?我認爲Django建議的方法是使用'User = get_user_model()'來代替。 – Kimvais

+0

啊......我應該更清楚一點。我可以「創建」一個用戶,但是我無法將「書」添加到「權威圖書」。它說「對象用戶沒有授權書籍的屬性」。我只能假設它正在創建原始用戶而不是我的自定義用戶。 – user1349663

回答

1

的create_user管理方法只接受三個參數,用戶名,電子郵件(可選)和密碼(可選)。

你可以這樣做:

bookset=Book.objects.all() 
user = User.objects.create_user('testuser',email='[email protected]') 
user.entitledBooks=bookset 
user.save() 
+0

我使用了user.entitledBooks.add,但是,我不得不創建用戶對象,然後將額外的字段添加到它。所以我會接受這個答案。 – user1349663

0

在簡單可行的,鬆耦合的方式是創建一個包含許多一對多關係

class UserProfile(models.Model): 
    user = model.OneToOneField(User) 
    # your many-to-many field here 


# create user 
u = User(username="", password="", email="", ...) 
u.save() 
u.userprofile(your fields..here) 
u.userprofile.save() 

這通常是在所有的Django版本同一個一比一的關係用戶配置模式。什麼基本的Django 1.6棄用是提供一個模型方法get_profile和一些相關設置..

除非你真的想直接從地面建立User模型按照要求,你沒有真正使用AUTH_USER_MODEL ..

從用戶模型

卸下用戶個人資料也有助於從長遠來看

+0

啊。感謝您通知我AUTH_USER_MODEL。但自AbstractUser提供後,我想知道如何使用它。 – user1349663

+0

請參閱django文檔,在那裏最好解釋。 – Surya

+0

使用'AUTH_USER_MODEL'假定你從頭開始構建所有的東西,沒有別的東西..有一些小的安全措施,這些類的照顧..當你從頭開始構建時,看看代碼 – Surya

相關問題