13

Django には、User (Django によって事前定義された) と UserProfile の 2 つのモデルがあります。この 2 つは外部キーを介して接続されます。顧客が自分のユーザー プロファイルを編集できるフォームを作成しています。そのため、このフォームは上記の両方のモデルに基づいています。

このフォームの 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() 関数を書き始める前にこれを変更することをお勧めしますか?

4

2 に答える 2

15

これはあなたを助けることができます

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()
于 2012-08-14T00:51:57.157 に答える
7

コンストラクターへの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>
于 2012-08-14T00:26:27.943 に答える