我在我的Django应用上创建了这个UserProfile
模型,我希望存储一些用户信息,例如about_me
,twitter
等。
在我的表单中,我(现在)只是添加了用户模型中的额外字段(名字,姓氏,电子邮件),保存用户配置文件后,我查询了用户模型并更新了那个,但我想知道是否我可以在同一页面上从单独的表单(UserForm
)加载这些字段,而无需手动添加这些字段。到目前为止,这是我的代码:
class ProfileForm( forms.ModelForm ):
first_name = forms.CharField( required = True, widget = forms.TextInput(
attrs = {
'placeholder': 'First name'
}
) )
last_name = forms.CharField( required = True, widget = forms.TextInput(
attrs = {
'placeholder': 'Last name'
}
) )
email = forms.EmailField( required = True, widget = forms.TextInput(
attrs = {
'placeholder': 'Email address'
}
) )
facebook_url = forms.URLField( required = False )
gplus_url = forms.URLField( required = False )
about_me = forms.CharField( required = False, widget = forms.Textarea( attrs = {
'rows': 10,
'placeholder': 'Something about you'
} ) )
class Meta:
model = UserProfile
fields = ['facebook_url', 'gplus_url', 'twitter_url', 'website', 'about_me']
widgets = {
'facebook_url': forms.TextInput(
attrs = {
'placeholder': 'Your facebook url'
}
),
'gplus_url': forms.TextInput(
attrs = {
'placeholder': 'Your google+ url'
}
)
}
正如您所看到的,前三个字段应该是不同表单的一部分,但如何将其包含在内?我的代码运行正常,但我觉得有一种Django
方法可以做到这一点。
答案 0 :(得分:1)
您可以在一个页面上使用2个表单。只需为表单选择不同的前缀:
user_form = UserForm(prefix='user_form')
profile_form = UserForm(prefix='profile_form')
只需在一个html <form>
标记中打印出来:
<form>
{{ user_form.as_p }}
{{ profile_form.as_p }}
<input type="submit"/>
</form>
只需验证每一个,然后保存:
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
编辑:正如丹尼尔罗斯曼指出的那样,您可能希望在每个表单上单独检查is_valid()
,这样您将始终在两个表单上看到错误。像这样:
user_valid = user_form.is_valid()
profile_valid = profile_form.is_valid()
if user_valid and profile_valid:
user_form.save()
profile_form.save()