2013-04-02 82 views
2

我正在使用Django註冊包讓用戶創建帳戶,驗證它們並登錄到我的webapp。Django註冊:如何創建帳戶請求名/

但是,帳戶創建的表單/視圖不會要求用戶輸入名字/姓氏(這些字段是模型BTW的一部分)。它只要求他們的電子郵件地址,登錄ID和密碼(兩次)。我希望它要求用戶的名字/姓氏(這些字段可以是可選的...但它仍然應該問)。我找不到表單並查看要修改的文件,以便請求此信息。我修改了模板文件。但沒有形式和視圖修改是無用的。這是如何完成的?

回答

5

在你forms.py,延長DjangoRegistration格式如:

class MyExtendedForm(RegistrationForm): 
    first_name = forms.CharField(widget=forms.TextInput(label="first_name")) 
    last_name = forms.CharField(widget=forms.TextInput(label="last_name")) 

urls.py,告訴Django註冊使用這個擴展形式:

# using my registration form to override the default 
(r'^register/$', 
    register, 
    {'backend': 'registration.backends.default.DefaultBackend', 
    'form_class': MyExtendedForm}), 

定義user_created以節省額外購買信息:

def user_created(sender, user, request, **kwargs): 
    """ 
    Called via signals when user registers. Creates different profiles and 
    associations 
    """ 
    form = MyExtendedForm(request.Post) 
    # Update first and last name for user 
    user.first_name=form.data['first_name'] 
    user.last_name=form.data['last_name'] 
    user.save() 

然後,註冊fo ř從django的登記信號來調用函數的任何註冊處理後:

from registration.signals import user_registered 
user_registered.connect(user_created) 
+0

使一些相對小修改上述代碼之後,這個工作。謝謝! –

+0

我的修改仍未發佈。沒有它們,你的代碼就無法工作。所以爲了其他人的利益,我在這裏發佈它們: 類MyExtendedForm中的每一行上都有一個缺少的右括號。另外,user_created中的第一行應該是form = MyExtendedForm(request.Post)。 user_created的定義必須在註冊Django註冊信號之前進行。 –

+0

是的,我剛剛按邏輯順序給出了一個原型代碼。很高興它對你有效。 – zaphod