1
我發現此 post關於如何使用諸如「email」等額外字段擴展UserCreationForm。但是,電子郵件字段已在預建的用戶模型中定義。如何使用UserProfile中的字段擴展UserCreationForm
我創建了一個額外的模型(稱爲UserProfile),它進一步擴展了Django的預構建User類。如何讓我在UserProfile中定義的這些字段出現在我的UserCreationForm中?
我發現此 post關於如何使用諸如「email」等額外字段擴展UserCreationForm。但是,電子郵件字段已在預建的用戶模型中定義。如何使用UserProfile中的字段擴展UserCreationForm
我創建了一個額外的模型(稱爲UserProfile),它進一步擴展了Django的預構建User類。如何讓我在UserProfile中定義的這些字段出現在我的UserCreationForm中?
添加字段以適合您的UserProfile
模型(這不是太容易使用ModelForm
避免重複自己,遺憾的是),然後創建並保存新UserProfile
例如在過纏身save()
功能。改編自您鏈接到的帖子:
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class UserCreateForm(UserCreationForm):
job_title = forms.CharField(max_length=100, required=True)
age = forms.IntegerField(required=True)
class Meta:
model = User
def save(self, commit=True):
if not commit:
raise NotImplementedError("Can't create User and UserProfile without database save")
user = super(UserCreateForm, self).save(commit=True)
user_profile = UserProfile(user=user, job_title=self.cleaned_data['job_title'],
age=self.cleaned_data['age'])
user_profile.save()
return user, user_profile
謝謝!只是爲了澄清我自己,job_title和age是在UserProfile中定義的字段的權利?我們知道UserProfile通過外鍵連接到用戶。這是否意味着如果我爲像User這樣的模型創建一個Model Form,那麼來自任何User的外鍵的字段也可以在Form中使用? – goelv 2012-08-11 23:27:36
'job_title'和'age'是,你的'UserProfile'模型中的假想字段。關鍵是您可以將任何您喜歡的字段添加到「ModelForm」;與「Meta」中指定的模型無關的部分將被忽略,並由您來處理。這就是我所建議的代碼所做的事情(從'self.cleaned_data'中提取值。 – supervacuo 2012-08-11 23:29:53
* ie *即使這些字段不是'UserProfile'上的模型字段,它們仍然可以工作,您只是無法做到在'save()'中有任何有意義的東西,'UserProfile'沒有什麼特別之處 – supervacuo 2012-08-11 23:31:12