使用inlineFormset使用UpdateView时,Django ExourthKey对象不会保存



我很难处理特殊情况。我使用的是UpdateView,以服务标准形式(特定于ModelForm(和一个内联表单集。

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()行,尽管它不能保存自身,但我猜它应该更新对象。这怎么了?

可能很容易解决,但我的想法确实陷入困境!非常欢迎任何类型的帮助或建议!

预先感谢您!

您需要在保存之前致电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))

最新更新