2016-12-14 55 views
0

我有一個在ListView中實現的窗體。該表單用於編輯現有項目。不過,我得到一個關鍵的錯誤,當我嘗試提交表單: File "C:\Users\John\Desktop\website\app\views.py", line 124, in form_valid id = self.kwargs['id'] KeyError: 'id' [14/Dec/2016 21:42:09] "POST /car/ HTTP/1.1" 500 99346Django窗體 - 關鍵錯誤

這是主代碼:

class CarListFormView(FormView): 
    form_class = CarListForm 

    def form_valid(self, form): 
     id = self.kwargs['id'] 
     obj = Car.objects.get(pk=id) 
     form = CarListForm(instance=obj) 
     car = form.save(commit=False) 

     if self.request.user.is_staff: 
      car.agency = Agency.objects.get(agency_id=9000) 
     else: 
      car.agency = self.request.user.agency 
     car.save() 
     return redirect('car_list') 

是什麼原因導致這個關鍵的錯誤?

謝謝!

回答

1

id不在您的kwargs,這是導致KeyError。事實上,你不需要像這樣裝車。您的方法可以簡化爲:

from django.views.generic import UpdateView 

class CarListFormView(UpdateView): 
    model = Car 
    form_class = CarListForm 
    template_name = 'something/car_form.html' 

    def form_valid(self, form): 
     car = form.save(commit=False) 

     if self.request.user.is_staff: 
      car.agency = Agency.objects.get(agency_id=9000) 
     else: 
      car.agency = self.request.user.agency 
     car.save() 
     return redirect('car_list') 
+0

如何將'id'添加到我的'kwargs'中?我不認爲我可以像你提議的那樣簡化,因爲我使用表單編輯現有對象而不添加新對象。我很抱歉沒有在我的問題中指出這一點。 – Wessi

+0

如果您使用來自django.views.generic import UpdateView'的'UpdateView'',則可以按照我的建議進行簡化。該視圖知道您正在編輯模型,並且不會創建新模型。 – Brobin

+0

我已更新我的答案以反映此問題 – Brobin