最好的辦法是在你有一個組織文件(比如說,「forms.py」)的應用程序來創建,並做到這一點:
from registration.forms import RegistrationForm
from forms import *
from models import Organization
class RegistrationFormWithOrganization(RegistrationForm):
organization_logo = field.ImageField()
organization_name = field.CharField()
def save(self, profile_callback = None):
Organization.objects.get_or_create(user = self.cleaned_data['user'],
logo = self.cleaned_data['organization_logo'],
name = self.cleaned_data['organization_name'])
super(RegistrationFormWithOrganization, self).save(self, profile_callback)
,然後在基本URL ,重寫現有的URL登記,並添加這種形式爲您的形式使用:
form organization.forms import RegistrationFormWithOrganization
url('^/registration/register$', 'registration.views.register',
{'form_class': RegistrationFormWithOrganization}),
url('^/registration/', include('registration.urls')),
記住Django會使用正則表達式匹配的第一個網址,因此將匹配您的電話,而不是Django的註冊的。它還會告訴註冊使用您的表單,而不是它自己的表單。我在這裏跳過了很多驗證(並且,可能是用戶對象的派生...如果是這樣,請閱讀註冊的源代碼以查看它來自哪裏),但這絕對是正確的軌道在頁面上添加一些東西,儘量減少你的工作量。
這是行不通的,因爲(a)'RegistrationForm'沒有'user'場,所以'self.cleaned_data [ '用戶'] '會拋出一個'KeyError'異常; (b)你需要一個'User'對象來創建一個'Organization'對象,直到你調用'RegistrationForm.save'返回新創建的'user'對象時纔會得到這個對象。請參閱我的答案以獲得其他解決方案。 – 2011-09-28 09:17:15
@SimonKagwi @SimonKagwi我用你的答案,但我不斷收到此錯誤:TypeError at/accounts/register/ register()至少需要2個非關鍵字參數(給出1) – anc1revv 2012-08-22 01:17:43