2011-08-22 66 views
11

我在Django中編寫我的第一個應用程序,並且我遇到了create_object泛型視圖的問題;在我urls.py,我有:擴展Django的泛型視圖

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

的問題是,當用戶提交了「新」的形式,我需要操作將被保存到數據庫中的數據(其實我需要添加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中,只是一個例子,它覆蓋ListView類的get_object方法來更新last_accessed_date字段。

+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方法做到這一點現在我會覆蓋form_validIssac 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)