django编辑模型,包含来自相关模型的字段
我已经在Django应用程序上创建了这个django编辑模型,包含来自相关模型的字段,django,django-forms,Django,Django Forms,我已经在Django应用程序上创建了这个UserProfile模型,我想在其中存储一些用户信息,例如关于我的,推特等 在我的表单中,我(现在)刚刚添加了来自用户模型的额外字段(名字、姓氏、电子邮件),在保存用户配置文件后,我查询用户模型并更新该模型,但我想知道是否可以从同一页面上的单独表单(UserForm)加载这些字段,而无需手动添加这些字段。以下是我目前的代码: class ProfileForm( forms.ModelForm ): first_name = forms.Char
UserProfile
模型,我想在其中存储一些用户信息,例如关于我的,推特
等
在我的表单中,我(现在)刚刚添加了来自用户模型的额外字段(名字、姓氏、电子邮件),在保存用户配置文件后,我查询用户模型并更新该模型,但我想知道是否可以从同一页面上的单独表单(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'
}
)
}
正如您所看到的,前3个字段应该是另一个表单的一部分,但如何将它们包括在内?我的代码运行得很好,但我觉得有一种方法可以做到这一点。你可以在一个页面上使用两个表单。只需为表单选择不同的前缀:
user_form = UserForm(prefix='user_form')
profile_form = UserForm(prefix='profile_form')
只需在一个html
标记中打印出来:
<form>
{{ user_form.as_p }}
{{ profile_form.as_p }}
<input type="submit"/>
</form>
编辑:正如Daniel Roseman指出的,您可能需要在每个表单上分别检查是否有效()。大概是这样的:
user_valid = user_form.is_valid()
profile_valid = profile_form.is_valid()
if user_valid and profile_valid:
user_form.save()
profile_form.save()
稍微调整:如果第一个调用失败,is\u 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()