Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django编辑模型,包含来自相关模型的字段_Django_Django Forms - Fatal编程技术网

django编辑模型,包含来自相关模型的字段

django编辑模型,包含来自相关模型的字段,django,django-forms,Django,Django Forms,我已经在Django应用程序上创建了这个UserProfile模型,我想在其中存储一些用户信息,例如关于我的,推特等 在我的表单中,我(现在)刚刚添加了来自用户模型的额外字段(名字、姓氏、电子邮件),在保存用户配置文件后,我查询用户模型并更新该模型,但我想知道是否可以从同一页面上的单独表单(UserForm)加载这些字段,而无需手动添加这些字段。以下是我目前的代码: class ProfileForm( forms.ModelForm ): first_name = forms.Char

我已经在Django应用程序上创建了这个
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()