2012-08-13 15 views
8

Django'da iki modelim var: Kullanıcı (Django tarafından önceden tanımlanmış) ve UserProfile. İki yabancı bir anahtar ile bağlanır. Bir müşterinin kullanıcı profilini düzenlemesine izin veren bir form oluşturuyorum. Bu haliyle, bu form belirtilen her iki modele dayandırılacaktır.Django'da formlar için bir kaydetme yöntemini nasıl yazıyorsunuz?

Bu form için bir save() yöntemini nasıl oluştururum? Kayıt işlevini tamamlamanın adımları/gereksinimleri nelerdir?

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? 

bu iyi bir başlangıç ​​mı yoksa birileri bizi kurtarmak() fonksiyonunu yazmaya başlamadan önce bu kadar değişen öneriyoruz: Burada

Bugüne kadar forms.py yanı da bu?

+0

yardım eder? –

+2

İki modele dayanan bir ModelForm oluşturabilir miyim? Eğer öyleyse, bunu yapmayı nasıl yaparım? – goelv

cevap

3

kurucusuna (aynı zamanda miras yoluyla ModelForm üzerine) prefix argüman tek <form> etiketi içinde birden fazla form koymak ve sunulması üzerine bunları ayırt sağlayacaktır.

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

...

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

bu `ModelForm`s kullanmayın Neden size

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

Sadece açıklığa kavuşturmak/öğrenmek için, modellerin örnekleri olarak verileri kaydetmenin amacı nedir? Her form böyle mi, eğer öyleyse neden böyle? – goelv

+5

Yalnızca "ModelForm" tabanlı formlar yerleşik kaydetme yöntemine sahiptir. "Form" a dayalı formlar için bir kayıt yöntemi oluşturmanız gerekir. [ModelForms] (https://docs.djangoproject.com/en/1.3/topics/forms/modelforms/#the-save-method) – alexander

İlgili konular