2012-08-13 39 views
8

Tôi có hai mô hình trong Django: Người dùng (được xác định trước bởi Django) và UserProfile. Cả hai được kết nối thông qua một khóa ngoại. Tôi đang tạo biểu mẫu cho phép khách hàng chỉnh sửa hồ sơ người dùng của họ. Như vậy, biểu mẫu này sẽ được dựa trên cả hai mô hình được đề cập.Làm thế nào để bạn viết một phương pháp lưu cho các hình thức trong django?

Làm cách nào để tạo phương thức save() cho biểu mẫu này? Các bước/yêu cầu trong việc hoàn thành chức năng lưu là gì?

Dưới đây là những gì tôi có cho đến nay trong 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? 

Đây có phải là một sự khởi đầu tốt hay bất cứ ai muốn giới thiệu thay đổi này trước khi chúng ta bắt đầu viết các lưu) chức năng (?

+0

Tại sao không sử dụng 'ModelForm's? –

+2

Tôi có thể tạo một ModelForm dựa trên hai mô hình không? Nếu vậy, tôi sẽ làm thế nào? – goelv

Trả lời

3

Đối số prefix (cũng trên ModelForm bằng cách thừa kế) cho hàm tạo sẽ cho phép bạn đặt nhiều biểu mẫu trong một thẻ <form> và phân biệt giữa chúng khi gửi.

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

...

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

này có thể giúp bạn

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

Chỉ cần làm rõ/vì lợi ích của việc học tập, mục đích của việc lưu dữ liệu là trường hợp của các mô hình là gì? Đó là những gì mọi hình thức làm, và nếu như vậy tại sao là như vậy? – goelv

+5

Chỉ các biểu mẫu dựa trên "ModelForm" mới có phương thức được lưu. Đối với biểu mẫu dựa trên "Biểu mẫu", bạn phải tạo phương thức lưu. [ModelForms] (https://docs.djangoproject.com/en/1.3/topics/forms/modelforms/#the-save-method) – alexander

Các vấn đề liên quan