2011-05-15 55 views
0

我想創建一個自定義配置文件,以將其他字段添加到django-registration。這裏是我的代碼至今 -django註冊create_user()意外的關鍵字

models.py

from django.db import models 
from django.contrib.auth.models import User 

class Profile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 
    email = models.CharField(max_length=50) 
    password = models.CharField(max_length=50) 

settings.py

AUTH_PROFILE_MODULE = 'myproject.Profile'

不過,我收到以下錯誤,當我嘗試使用create_user( )。這是當我鍵入它解釋發生了什麼 -

>>> from django.contrib.auth.models import User 
>>> User.objects.create_user(first_name='tom',last_name='smith',email='[email protected]',password='hello') 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
TypeError: create_user() got an unexpected keyword argument 'first_name' 

我是什麼,以便create_user()認識到這些新的列缺?謝謝。

回答

7

有一些事情你做錯了

首先,這些都不是用戶模型領域,他們是在剖面模型。所以用戶管理器方法無法識別它們應該不會令人感到意外。您需要使用create_user以普通方式定義User對象,然後使用該用戶定義Profile實例。

其次,create_user不會將所有字段名稱作爲關鍵字參數 - 它只需要username, email and password。再次,您需要在之後自行設置其他字段。

但是,我不明白爲什麼你定義了這些特定的領域。他們都在built-in User model。特別是,您絕對不應該定義自己的密碼字段,除非您還編寫了一些代碼來將密碼存儲爲散列而不是純文本。

+0

那麼如何存儲姓和名,如果我們不能使用create_user? – George 2013-10-17 16:16:42

1
username, first_name, last_name, email, password = kwargs['username'], kwargs['first_name'], kwargs['last_name'], kwargs['email'], kwargs['password1'] 
     user = User(username=username, email=email, first_name=first_name, last_name=last_name) 
     user.set_password(password) 
     user.save() 

這就是解決方案