2013-02-02 39 views
1

這個問題是一個後續的穆基這裏解釋瞭解決方案:Django註冊:要求輸入名字/姓氏的賬戶?

Problem in adding custom fields to django-registration

我已經安裝,並已成功地利用Django的註冊包。默認情況下,當您使用此軟件包創建帳戶時,它會要求輸入您的用戶名,電子郵件地址和密碼。我希望它也要求(可選)名字+姓氏。上面鏈接中的Muki的答案解釋瞭如何做到這一點。

但是,Muki忽略了他應該在custom/forms.py中創建的文件。我需要知道我應該在這裏創建的類的名稱是什麼以及字段定義應該是什麼樣的。

有人可以發佈樣本forms.py,我可以用來完成我想要做的事嗎?

回答

0

如果自定義後端是在custom文件夾,然後custom/forms.py可能是這樣的:

from django import forms 
from registration.forms import RegistrationForm 


class RegistrationFormWithName(RegistrationForm): 
    first_name = forms.CharField(required=False) 
    last_name = forms.CharField(required=False) 

這增加了你的兩個可選字段的默認登記表。要告訴您的自定義後端使用此新窗體而不是默認窗體,您需要更改custom/__init__.pyMuki's answer中的get_form_class方法,說明如何做到這一點。

當然,您還需要處理保存來自first_namelast_name字段的數據。

編輯

custom/__init__.py需求是這個樣子:

from registration.backends.default import DefaultBackend 
from registration.backends.custom.forms import RegistrationFormWithName 

class CustomBackend(DefaultBackend): 
    def get_form_class(self, request): 
     return RegistrationFormWithName 

而且custom/urls.py需要這樣一行:

url(r'^register/$', register, {'backend': 'registration.backends.custom.CustomBackend'}, name='registration_register'), 

更改CustomBackend類的名稱在這兩個文件中,無論你打電話給你的新後端。

查看default backend source以瞭解其他可覆蓋的方法。希望有所幫助。

+0

我迷路了。 從django的進口形式 從registration.forms導入RegistrationForm 類RegistrationFormWithName(RegistrationForm): 如first_name = forms.CharField(所需=假) 姓氏仍然可以看到,只有4個字段 custom.forms.py寄存器形式= forms.CharField(所需=假) 定製/ __ init.py__包括: 從registration.forms導入RegistrationForm 從registration.backends.custom.forms導入RegistrationForm 定製/ urls.py,我改變線作爲這樣: 網址(r '^ register/$',register,{'backend':'registration.backends.custom.DefaultBackend'},name ='registration_register'), –

0

link解釋的過程以及和Django的登記工作1.0

這裏除了上面的代碼一些額外的指針。

要更新的第一個名字改變這種在models.py

def user_registered_callback(sender, user, request, **kwargs): 
profile = ExUserProfile(user = user) 
profile.is_human = bool(request.POST["is_human"]) 
user.first_name = request.POST["firstname"] 
user.save() 
profile.save() 

user_registered.connect(user_registered_callback) 

,並在forms.py文件

class ExRegistrationForm(RegistrationForm): 
    is_human = forms.BooleanField(label = "Are you human?:") 
    firstname = forms.CharField(max_length=30) 
    lastname = forms.CharField(max_length=30) 

終於在表單上看到的變化創造一個合適的模板。通過在你的應用程序中創建一個名爲admin.py的文件,可以在管理員中看到該配置文件,並寫入以下代碼

from django.contrib import admin 
from django.contrib.auth.models import User 
from django.contrib.auth.admin import UserAdmin 
from prof.models import ExUserProfile 

admin.site.unregister(User) 

class UserProfileInline(admin.StackedInline): 
    model = ExUserProfile 

class UserProfileAdmin(UserAdmin): 
    inlines = [ UserProfileInline, ] 

admin.site.register(User, UserProfileAdmin) 
相關問題