2012-08-13 26 views
8

我在Django中有两个模型:User(由Django预定义)和UserProfile。两者通过外键连接。我正在创建一个允许客户编辑其用户配置文件的表单。因此,这种形式将基于上述两种模式。如何为django中的表单编写保存方法?

如何为此表单创建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? 

这是一个良好的开端还是会有人建议改变此之前,我们开始写的保存()函数?

+0

为什么不使用'ModelForm's? – 2012-08-14 00:14:44

+2

我可以创建基于两种模型的ModelForm吗?如果是这样,我该怎么做呢? – goelv 2012-08-14 00:19:05

回答

3

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> 
8

这可以帮助你

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

只是为了阐明/学习的缘故,将数据保存为模型实例的目的是什么?这就是每种形式所做的事情吗?如果是这样,为什么? – goelv 2012-08-14 02:17:57

+5

只有基于表单的“ModelForm”具有内置的保存方法。 对于基于“表单”的表单,您必须创建一个保存方法。 [ModelForms](https://docs.djangoproject.com/en/1.3/topics/forms/modelforms/#the-save-method) – alexander 2012-08-15 02:22:28

相关问题