2011-08-22 21 views
11

Tôi đang viết ứng dụng đầu tiên của mình ở Django và tôi gặp sự cố với Chế độ xem Chung create_object; Trong tôi urls.py, tôi có:Mở rộng Chế độ xem Chung của Django

(r'^new$', CreateView.as_view()), 

Vấn đề là khi người dùng gửi các hình thức "mới", tôi cần phải thao tác các dữ liệu sẽ được lưu vào cơ sở dữ liệu (tôi thực sự cần phải thêm user_id nước ngoài Chìa khóa); mà không có chế độ xem chung tôi đã sử dụng để viết:

form = ClientForm(request.POST) 
    if form.is_valid(): 
     data = form.save(commit=False) 
     data.user = request.user 
     data.save() 
     form.save_m2m() 

theo quan điểm của tôi (thông báo data.user=request.user). Tôi đã tìm kiếm tài liệu Django nhưng tôi không thể tìm thấy cách để làm điều này (có thể bằng cách mở rộng lớp CreateView) - somewere trong Sách chỉ có một ví dụ ghi đè phương thức get_object của lớp ListView để cập nhật trường last_accessed_date.

+0

Dưới đây là "Thực hiện thêm công việc", nơi họ giải thích phương thức get_object có thể được ghi đè bằng cách mở rộng lớp [link] (https://docs.djangoproject.com/en/dev/topics/class-based-views/#performing-extra-work) –

Trả lời

20

Bạn có thể làm điều này bằng cách ghi đè các get_form phương pháp:

from django.views.generic import CreateView 

class CustomCreateView(CreateView): 
    def get_form(self, form_class): 
     form = super(CustomCreateView, self).get_form(form_class) 
     form.instance.user = self.request.user 
     return form 

EDIT: Ngày nay tôi sẽ ghi đè form_valid theo Issac Kelly's answer:

from django.views.generic import CreateView 

class CustomCreateView(CreateView): 
    def form_valid(self, form): 
     form.instance.user = self.request.user 
     return super(CustomCreateView, self).form_valid(form)