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