2012-08-13 12 views
8

Mam dwa modele w Django: Użytkownik (wstępnie zdefiniowany przez Django) i UserProfile. Oba są połączone za pomocą klucza obcego. Tworzę formularz, który pozwala klientowi edytować swój profil użytkownika. Jako taki, ten formularz będzie oparty na obu wymienionych modelach.Jak piszesz metodę zapisu dla formularzy w django?

Jak utworzyć metodę save() dla tego formularza? Jakie są kroki/wymagania dotyczące wypełniania funkcji składowania?

Oto co mam do tej pory w 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? 

Czy to dobry początek czy też ktoś polecić ten zmienia się, zanim zaczniemy pisać zapisać funkcję()?

+0

Dlaczego nie używać 'ModelForm's? –

+2

Czy mogę utworzyć model modelowy oparty na dwóch modelach? Jeśli tak, to jak mam to zrobić? – goelv

Odpowiedz

3

prefix argument (także na ModelForm przez dziedziczenie) do konstruktora będzie można umieścić wiele form w obrębie jednego <form> tagu i rozróżniać je na przedstawienia.

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

...

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

to może pomóc

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

Tylko po to, aby wyjaśnić/wiedzieć, jaki jest cel zapisywania danych jako wystąpień modeli? Czy to robi każda forma, a jeśli tak, to dlaczego? – goelv

+5

Tylko formularze oparte "ModelForm" mają wbudowaną metodę zapisu. Dla formularzy opartych na "Formularzu", należy utworzyć metodę zapisu. [ModelForms] (https://docs.djangoproject.com/en/1.3/topics/forms/modelforms/#the-save-method) – alexander

Powiązane problemy