2013-04-18 72 views
2

我是django的新手。任何人都可以幫助我使用這段代碼。我試圖計算2 DateField之間的時間,然後保存。Django form_valid不工作

class EmployeeCreate(CreateView): 
    model = Employee 
    form_class = EmployeeCreateForm 
    success_url = "/employee-list/" 

    def form_valid(self, form): 
     self.object.total_leave = (self.object.to_date - self.object.from_date).days +1 
     self.object.save() 
     return HttpResponseRedirect(self.get_success_url()) 
+0

問題是什麼? – Rohan 2013-04-18 04:49:39

+0

我無法計算並保存total_leave。它沒有保存任何東西 – user1708597 2013-04-18 04:51:57

+0

現在出現錯誤異常值:'NoneType'對象沒有屬性'total_leave' – user1708597 2013-04-18 05:01:18

回答

6

有幾個問題

  1. 您應該使用form.instance代替self.object
  2. 調用超方法

所以更新您的代碼:

def form_valid(self, form): 
    form.instance.total_leave = (self.instance.to_date - self.instance.from_date).days +1 
    form.instance.save() 
    return super(EmployeeCreate, self).form_valid(form) 

參考文檔Form handling with class-based views

+0

獲取錯誤:異常值:'EmployeeCreate'對象沒有屬性'instance' – user1708597 2013-04-18 05:11:07

+1

def form_valid(self,form): form。 instance.total_leave =(form.instance.to_date - form.instance.from_date).days +1 form.instance.save() return super(LeaveCreate,self).form_valid(form) – user1708597 2013-04-18 05:14:30

+0

它現在可以工作的thanx人 – user1708597 2013-04-18 05:14:46

3

因爲CreateView首先你必須保存表單才能獲得一個對象。

不要將對象繼續存儲到數據庫以進一步定製(commit=False)。

然後更改對象以符合您的要求。最後在數據庫中保存對象並返回重定向響應。

def form_valid(self, form): 
    self.object = form.save(commit=False) 
    self.object.total_leave = (self.object.to_date - self.object.from_date).days + 1 
    self.object.save() 
    return HttpResponseRedirect(self.get_success_url()) 

也期待在基本form_valid實施ModelFormMixin

def form_valid(self, form): 
    self.object = form.save() 
    return super(ModelFormMixin, self).form_valid(form) 

然後super(ModelFormMixin, self).form_valid(form)鏈接到FormMixin

def form_valid(self, form): 
    return HttpResponseRedirect(self.get_success_url()) 

因此,我們結合在一個方法兩個步驟。