2012-08-13 8 views
8

Ho due modelli in Django: User (predefinito da Django) e UserProfile. I due sono collegati tramite una chiave esterna. Sto creando un modulo che consente al cliente di modificare il proprio profilo utente. In quanto tale, questo modulo sarà basato su entrambi i modelli menzionati.Come si scrive un metodo di salvataggio per i form in django?

Come si crea un metodo save() per questo modulo? Quali sono i passaggi/i requisiti per completare la funzione di salvataggio?

Ecco quello che ho finora in 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? 

questo è un buon punto di partenza o di qualcuno dovrebbe raccomandare la modifica di questa prima di iniziare a scrivere la funzione di salvataggio()?

+0

Perché non usare 'ModelForm's? –

+2

Posso creare un ModelForm basato su due modelli? Se sì, come potrei fare? – goelv

risposta

3

Il prefix argomento (anche su ModelForm per eredità) al costruttore vi permetterà di inserire forme multiple all'interno di un singolo tag <form> e distinguere tra loro su sottomissione.

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

...

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

questo potrebbe aiutare a

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

Giusto per chiarire/imparare, qual è lo scopo di salvare i dati come istanze dei modelli? È questo che fa ogni forma, e se è così, perché è così? – goelv

+5

Solo i moduli basati "ModelForm" dispongono di un metodo di salvataggio integrato. Per i moduli basati su "Form", è necessario creare un metodo di salvataggio. [ModelForms] (https://docs.djangoproject.com/en/1.3/topics/forms/modelforms/#the-save-method) – alexander

Problemi correlati