2016-12-14 12 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

私の 'kwargs'に' id'を追加するにはどうしたらいいですか?既存のオブジェクトを編集し、新しいオブジェクトを追加しないようにフォームを使用しているので、提案したように単純化することはできません。私は私の質問でそれを指定しないことをお詫びします。 – Wessi

+0

'UpdateView':' from django.views.generic import UpdateView'を使用することをお勧めします。このビューは、モデルを編集しており、新しいモデルを作成しないことを認識しています。 – Brobin

+0

私はこれを反映するために私の答えを更新しました – Brobin