【问题标题】:How do you write a save method for forms in django?你如何在 django 中为表单编写保存方法?
【发布时间】:2012-08-10 05:59:19
【问题描述】:

我在 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?

这是一个好的开始吗?或者有人会建议在我们开始编写 save() 函数之前对其进行更改吗?

【问题讨论】:

  • 我可以创建一个基于两个模型的 ModelForm 吗?如果是这样,我将如何去做?

标签: python django django-models django-forms


【解决方案1】:

这对你有帮助

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()

【讨论】:

  • 只是为了澄清/学习,将数据保存为模型实例的目的是什么?这是每个表单都做的事情吗?如果是,为什么会这样?
  • 只有基于表单“ModelForm”有一个内置的保存方法。对于基于“表单”的表单,您必须创建一个保存方法。 ModelForms
【解决方案2】:

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

mf1 = ModelForm1(prefix="mf1")
mf2 = ModelForm2(prefix="mf2")
return render_to_response(..., {'modelform1': mf1, 'modelform2': mf2}, ...)

...

<form method="post">
{{ modelform1 }}
{{ modelform2 }}
 ...
</form>

【讨论】:

    猜你喜欢
    • 2013-08-25
    • 1970-01-01
    • 2011-10-11
    • 2013-01-03
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多