2017-06-04 6 views
0

私は特別なケースを扱うのに苦労します。標準フォーム(具体的にはModelForm)とインラインformsetを提供するために私が使用するUpdateViewがあります。InlineFormSetでUpdateViewを使用しているときにDjango ForeignKeyオブジェクトが保存されない

views.pyコードは次のようになります。私は、例えば(私はこの更新ビューを開くときに、予想通り

class Contract(LoginRequiredMixin, UpdateView): 
    template_name = '/path/to/template.html' 
    model = ContractModel 
    form_class = ContractModelForm 
    success_url = reverse_lazy('contract-list') 

    def get_context_data(self, **kwargs): 
     context = super(ContractVerificationUpdate, self).get_context_data(**kwargs) 
     if self.request.POST: 
      context['student_form'] = StudentsFormSet(self.request.POST) 
     else: 
      context['student_form'] = StudentsFormSet(instance=self.object) 
     return context 

    def form_valid(self, form): 
     self.object = form.save(commit=False) 
     context = self.get_context_data() 
     student_form = context['student_form'] 
     if student_form.is_valid(): 
      self.object = form.save() 
      student_form.instance = self.object 
      student_form.save() 
      return HttpResponseRedirect(self.get_success_url()) 
     else: 
      return self.render_to_response(self.get_context_data(form=form)) 

、この契約モデルに割り当てられた学生のがすべて示されているが、私は彼らに何かを編集するとき生徒の名前を編集する)、保存ボタンを押すと保存されません。私のデバッガでは、student_form.save()という行に到達していることが確認されていますが、オブジェクト自体は保存されませんが、オブジェクトを更新するはずです。これには何が問題なのですか?

解決することは非常に簡単ですが、私の心は本当にこの時点で固まっています!どんな種類の助けや提案も大歓迎です!

ありがとうございます!

答えて

1

保存する前にform.is_valid()に電話する必要があります。

編集このようなあなたのビュー、私は別のアプローチと私の問題を解決するために管理しても

def form_valid(self, form): 
    self.object = form.save(commit=False) 
    context = self.get_context_data() 
    student_form = context['student_form'] 
    if form.is_valid() and student_form.is_valid(): 
     self.object = form.save() 
     student_form.instance = self.object 
     student_form.save() 
     return HttpResponseRedirect(self.get_success_url()) 
    else: 
     return self.render_to_response(self.get_context_data(form=form)) 
+0

は、あなたも、理にかなっているモデルとフォームセット – zaidfazil

+0

を示すことができる: 'get_context_data(でPOSTリクエストの場合には) '、私は' context ['student_form'] = StudentsFormSet(self.request.POST) 'をこの' context ['student_form'] = StudentsFormSet(self.request.POST、instance = self.get_object()) 'に変更しました。今それは正常に動作します。 –

関連する問題