无法在django中的ModelFormSetView中保存对象

时间:2015-06-03 11:26:16

标签: django django-forms django-class-based-views formset

我正在使用django-extra-views中的ModelFormSetView,但无法保存ModelFormSet所基于的模型对象

class StudentEnrolInClassView(SuccessMessageMixin, ModelFormSetView):
     model = StudentApplication
     ...

     def formset_valid(self, formset):
        for student_application in formset.cleaned_data:
            if student_application['school_class']:
                appl = student_application['id']
                student = Student()
                ...
                student.save()
                enrolment = Enrolment(student=student, school_class=student_application['school_class'])
                enrolment.save()
                appl.approved = datetime.datetime.now()
                appl.student = student
                appl.save()  # THIS ISN'T SAVING!
        return super(StudentEnrolInClassView, self).formset_valid(formset)

新创建的学生和注册对象可以正确保存,但预先存在(和更新)的应用程序不会保存,但不会抛出任何错误或警告。我尝试使用以下方法从数据库中获取新的实例:

appl = StudentApplication.objects.get(id=student_application['id'].id)

但这没有任何效果。

任何想法会发生什么?

1 个答案:

答案 0 :(得分:1)

最后,我发现问题出在最后调用super formset_valid()函数时。 ModelFormSetView中的formset_valid()保存formset的对象。在这种情况下,由于原始对象仅用于查看(不是编辑),因此它保存原始对象,在之后未修改它已将修改后的对象保存在视图中。所以上面的代码正确保存,只是那些我们在不久之后用原始对象覆盖的对象。通过替换

解决了这个问题
return super(StudentEnrolInClassView, self).formset_valid(formset)

return HttpResponseRedirect(self.get_success_url())