2015-06-03 2 views
1

Я работаю с ModelFormSetView от Джанго-экстра-взглядов, но я не в состоянии сохранить объект модели, которая базируется ModelFormSetНевозможно сохранить объект внутри ModelFormSetView в Джанго

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

В конце концов, я обнаружил, что проблема заключалась в вызове функции super formset_valid() в конце. formset_valid() в ModelFormSetView сохраняет объекты набора форм. В этом случае, поскольку исходные объекты предназначены только для просмотра (не редактирования), он сохраняет исходные объекты, которые были немодифицированы после, он сохранил измененные объекты в моем представлении. Таким образом, приведенный выше код был правильно сохранен, только те объекты, которые мы переписываем с оригинальными объектами вскоре после этого. Проблема была решена путем замены

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

с

return HttpResponseRedirect(self.get_success_url()) 
+0

Я его таким же образом, и до сих пор не работает. – SalahAdDin

Смежные вопросы