【问题标题】:Can't save an object inside a ModelFormSetView in django无法在 django 的 ModelFormSetView 中保存对象
【发布时间】:2015-08-17 14:02:15
【问题描述】:

我正在使用 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)

但这没有任何效果。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    最后,我发现问题出在最后调用了超级 formset_valid() 函数。 ModelFormSetView 中的 formset_valid() 保存表单集的对象。在这种情况下,由于原始对象仅用于查看(而非编辑),因此它会保存原始对象,这些对象在 后未修改,它已将修改后的对象保存在我的视图中。所以上面的代码是正确保存的,只是那些我们很快被原始对象覆盖的对象。问题通过更换解决了

    return super(StudentEnrolInClassView, self).formset_valid(formset)
    

    return HttpResponseRedirect(self.get_success_url())
    

    【讨论】:

      猜你喜欢
      • 2016-03-04
      • 1970-01-01
      • 2021-11-15
      • 2013-12-16
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      相关资源
      最近更新 更多