我使用扩展的UserProfile。现在我想制作个人资料版。我需要从原始用户模型中放置所有自定义配置文件字段和电子邮件,名字,姓氏。 我尝试这样做,但不能使它工作。电子邮件字段未显示。没有显示用户模型。
我的表格:
class MainUserProfile(ModelForm):
class Meta:
model = User
fields = ('email',)
class UserProf(MainUserProfile):
class Meta:
model = UserProfile
我的观点:
form = UserProf(instance=request.user.get_profile())
更新
我做到了:)这是代码:
class EditCustomerForm(ModelForm):
def __init__(self, *args, **kwargs):
super(EditCustomerForm, self).__init__(*args, **kwargs)
try:
self.fields['email'].initial = self.instance.user.email
self.fields['first_name'].initial = self.instance.user.first_name
self.fields['last_name'].initial = self.instance.user.last_name
except User.DoesNotExist:
pass
required_css_class = 'required'
error_css_class = 'error'
email = forms.EmailField(label=_(u"Email"))
first_name = forms.CharField(max_length=30, required=True, label=_(u'Forname'))
last_name = forms.CharField(max_length=30, required=True, label=_(u'Surname'))
address = forms.CharField(max_length=255, min_length=10, required=True, label=_(u'Address'))
class Meta:
model = UserProfile
fields = ('email', 'first_name', 'last_name', 'address')
def clean_email(self):
return check_email(self.cleaned_data['email'], self.instance.user.id)
def save(self, *args, **kwargs):
u = self.instance.user
u.email = self.cleaned_data['email']
u.save()
profile = super(EditCustomerForm, self).save(*args,**kwargs)
return profile
视图中的表单:
if request.method == 'POST':
form = EditCustomerForm(request.POST, instance=user)
else:
form = EditCustomerForm(instance=user)
答案 0 :(得分:1)
您可以像这样将初始数据传递给表单:
form = EditCustomerForm(instance=user, initial={
'email' : user.email
'first_name' : user.first_name
'last_name' : user.last_name
})
答案 1 :(得分:0)
我认为你不能使用ModelForm继承 - http://code.djangoproject.com/ticket/7018 - 包含一个类似的例子。
您可以使用formset(http://docs.djangoproject.com/en/dev/topics/forms/formsets/)来合并两个表单,或者如果这是通过管理员使用内联。
答案 2 :(得分:0)
您可能希望将数据库事务用于save(),因为您要保存两个不同的表。
答案 3 :(得分:0)
我认为您可以使用
UserProf(Modelform):
,并在视图用户.save()中找到这两种形式