2011-08-22 5 views
11

Django에서 첫 번째 앱을 쓰고 있는데 create_object 일반 뷰에 문제가 있습니다. 내 urls.py에서 내가 가진 :Django의 일반 뷰 확장

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

문제는 사용자가 "새로운"양식을 제출하면, 나는 데이터베이스에 저장 될 데이터를 조작 할 필요가있다 (I 실제로 user_id 외국를 추가해야 키); 일반 조회없이 내가 작성하는 데 사용 :

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

를 내보기 (통지 data.user=request.user)에서. Django 문서를 검색 한 적이 있지만 어쩌면 CreateView 클래스를 확장하여이 작업을 수행 할 수있는 방법을 찾을 수 없습니다. The Book에는 last_accessed_date 필드를 업데이트하는 ListView 클래스의 get_object 메서드를 재정의하는 예제 만 있습니다.

+0

은 "추가 작업 수행"어디 그들이 클래스를 확장하여 get_object 메소드를 재정의 할 수 있다고 설명합니다. [link] (https://docs.djangoproject.com/en/dev/topics/class-based-views/#performing-extra-work) –

답변

6

form_valid method을 무시하고 싶습니다.

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 

편집 :

20

당신은 get_form 메소드를 오버라이드하여이 작업을 수행 할 수 있습니다 요즘 나는 Issac Kelly's answer에 따라 form_valid을 무시할 것 :

여기
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) 
관련 문제