你如何在django中为表单编写保存方法?

goe*_*elv 11 python django django-models django-forms

我在Django中有两个模型:User(由Django预定义)和UserProfile.这两个通过外键连接.我正在创建一个允许客户编辑其用户个人资料的表单.因此,此表格将基于所提到的两种模型.

如何为此表单创建save()方法?完成保存功能有哪些步骤/要求?

这是我到目前为止在forms.py中所拥有的:

class UserChangeForm(forms.Form):
    #fields corresponding to User Model
    email = forms.EmailField(required=True)
    first_name = forms.CharField(max_length = 30)
    last_name = forms.CharField(max_length = 30)
    password1 = forms.CharField(max_length=30, widget=forms.PasswordInput)
    password2 = forms.CharField(max_length=30, widget=forms.PasswordInput)

    #fields corresponding to UserProfile Model
    gender = forms.CharField(max_length = 30, widget=forms.Select)
    year = forms.CharField(max_length = 30, widget=forms.Select)
    location = forms.CharField(max_length = 30, widget=forms.Select)

    class Meta:
        fields = ("username", "email", "password1", "password2", "location", "gender", "year", "first_name", "last_name")

    def save(self):
        data = self.cleaned_data
        # What to do next over here?
Run Code Online (Sandbox Code Playgroud)

这是一个好的开始,还是有人建议在我们开始编写save()函数之前更改它?

ale*_*der 12

这可以帮到你

def save(self):
    data = self.cleaned_data
    user = User(email=data['email'], first_name=data['first_name'],
        last_name=data['last_name'], password1=data['password1'],
        password2=data['password2'])
    user.save()
    userProfile = UserProfile(user=user,gender=data['genger'],
        year=data['year'], location=data['location'])
    userProfile.save()
Run Code Online (Sandbox Code Playgroud)

  • 仅基于表单"ModelForm"具有内置保存方法.对于基于"表单"的表单,您必须创建一个保存方法.[ModelForms](https://docs.djangoproject.com/en/1.3/topics/forms/modelforms/#the-save-method) (6认同)

Ign*_*ams 5

构造函数的prefix参数(也ModelForm通过继承)将允许您将多个表单放在单个<form>标记中,并在提交时对其进行区分。

mf1 = ModelForm1(prefix="mf1")
mf2 = ModelForm2(prefix="mf2")
return render_to_response(..., {'modelform1': mf1, 'modelform2': mf2}, ...)
Run Code Online (Sandbox Code Playgroud)

...

<form method="post">
{{ modelform1 }}
{{ modelform2 }}
 ...
</form>
Run Code Online (Sandbox Code Playgroud)