Python Django-使用inline保存和更新表单集

Python Django-使用inline保存和更新表单集,python,django,formset,inline-formset,Python,Django,Formset,Inline Formset,我有一个TestingQuestion和TestingQuestion选项类。 创建测试问题时,我也使用StackedLine创建测试问题选项。 目前,创建新的TestingQuestion以及TestingQuestionOptions可以正常工作。 我遇到的问题是,当我想保存我已经创建的测试问题时。ie尝试编辑并保存更改。 我在这一行出现“列表索引超出范围”错误 "question = saved_options[0].question" 它位于“TestingQuestionFormS

我有一个TestingQuestion和TestingQuestion选项类。 创建测试问题时,我也使用StackedLine创建测试问题选项。 目前,创建新的TestingQuestion以及TestingQuestionOptions可以正常工作。 我遇到的问题是,当我想保存我已经创建的测试问题时。ie尝试编辑并保存更改。 我在这一行出现“列表索引超出范围”错误

 "question = saved_options[0].question"
它位于“TestingQuestionFormSet”类下的“保存现有对象”方法中

返回None,我不知道为什么,因为我希望它返回TestingQuestionOption。 任何帮助都将不胜感激。谢谢

这是密码

models.py

class TestingQuestion(models.Model):

class TestingQuestionOption(models.Model):
    question = models.ForeignKey(TestingQuestion, null=True, blank=False)
管理员

class TestingQuestionOptionInline(admin.StackedInline, SummernoteInlineModelAdmin):
    model = TestingQuestionOption
    formset = TestingQuestionFormSet

class TestingQuestionAdmin(SummernoteModelAdmin, ImportExportModelAdmin):
    form = TestingQuestionCreateForm
    inlines = (TestingQuestionOptionInline,)
forms.py

class TestingQuestionFormSet(forms.models.BaseInlineFormSet):

    def save_new_objects(self, commit=True):
        saved_options = super(TestingQuestionFormSet, self).save_new_objects(commit)
        if commit:
            question = saved_options[0].question
            for option in saved_options:
                if option.order == 0:
                    option.order = TestingQuestionOption.objects.filter(question=question).count() + 1
                if option.name == "Auto Generated":
                    option.name = "%s Option %s" % (question, option.order)
                option.save()

            if len(saved_options) < 2:
                order = TestingQuestionOption.objects.filter(question=question).count() + 1
                name = "%s Option %s" % (question, order)
                TestingQuestionOption.objects.create(name=name, order=order, question=question, correct=False)
        return saved_options

    def save_existing_objects(self, commit=True):
        saved_options = super(TestingQuestionFormSet, self).save_existing_objects(commit)
        if commit:
            question = saved_options[0].question
            for option in saved_options:
                if option.order == 0:
                    option.order = TestingQuestionOption.objects.filter(question=question).count() + 1
                if option.name == "Auto Generated":
                    option.name = "%s Option %s" % (question, option.order)
                option.save()

            if len(saved_options) < 2:
                order = TestingQuestionOption.objects.filter(question=question).count() + 1
                name = "%s Option %s" % (question, order)
                TestingQuestionOption.objects.create(name=name, order=order, question=question, correct=False)
        return saved_options

class TestingQuestionCreateForm(forms.ModelForm):
    def save(self, commit=True):
        testing_question = super(TestingQuestionCreateForm, self).save(commit=False)
        if testing_question.order == 0 or testing_question.name == "Auto Generated":
            count = TestingQuestion.objects.filter(module__id=self.data.get("module")).count() + 1
            module = Module.objects.get(id=self.data.get("module"))
            name = "%s Question %d" % (module, count)
            while TestingQuestion.objects.filter(name=name):
                count += 1
                name = "%s Question %d" % (module, count)
            testing_question.name = name
            testing_question.order = count
        testing_question.save()

        question_content = self.cleaned_data.get("question_content")
        testing_question.question_content = process_mathml_content(question_content, 0, testing_question.id)

        answer_content = self.cleaned_data.get("answer_content")
        testing_question.answer_content = process_mathml_content(answer_content, 1, testing_question.id)

        testing_question.save()

        return testing_question

    class Meta:
        model = TestingQuestion
class TestingQuestionFormSet(forms.models.BaseInlineFormSet):
def save_new_对象(self,commit=True):
saved_options=super(TestingQuestionFormSet,self)。保存新对象(提交)
如果提交:
问题=已保存的\u选项[0]。问题
对于保存的_选项中的选项:
如果option.order==0:
option.order=TestingQuestionOption.objects.filter(question=question.count()+1
如果option.name==“自动生成”:
option.name=“%s option%s”%(问题,option.order)
option.save()
如果len(已保存的_选项)<2:
order=TestingQuestionOption.objects.filter(question=question.count()+1
name=“%s选项%s”%(问题,顺序)
TestingQuestionOption.objects.create(name=name,order=order,question=question,correct=False)
返回保存的\u选项
def save_现有_对象(self,commit=True):
saved_options=super(TestingQuestionFormSet,self)。保存现有对象(提交)
如果提交:
问题=已保存的\u选项[0]。问题
对于保存的_选项中的选项:
如果option.order==0:
option.order=TestingQuestionOption.objects.filter(question=question.count()+1
如果option.name==“自动生成”:
option.name=“%s option%s”%(问题,option.order)
option.save()
如果len(已保存的_选项)<2:
order=TestingQuestionOption.objects.filter(question=question.count()+1
name=“%s选项%s”%(问题,顺序)
TestingQuestionOption.objects.create(name=name,order=order,question=question,correct=False)
返回保存的\u选项
类TestingQuestionCreateForm(forms.ModelForm):
def save(self,commit=True):
testing_question=super(TestingQuestionCreateForm,self).save(commit=False)
如果测试\u question.order==0或测试\u question.name==“自动生成”:
count=TestingQuestion.objects.filter(module\u id=self.data.get(“module”)).count()+1
module=module.objects.get(id=self.data.get(“module”))
name=“%s问题%d”%(模块,计数)
测试question.objects.filter(name=name)时:
计数+=1
name=“%s问题%d”%(模块,计数)
测试_question.name=名称
测试问题顺序=计数
测试_question.save()
question\u content=self.cleanned\u data.get(“question\u content”)
testing\u question.question\u content=process\u mathml\u content(question\u content,0,testing\u question.id)
answer\u content=self.cleanned\u data.get(“answer\u content”)
testing\u question.answer\u content=process\u mathml\u content(answer\u content,1,testing\u question.id)
测试_question.save()
返回测试问题
类元:
模型=测试问题
class TestingQuestionFormSet(forms.models.BaseInlineFormSet):

    def save_new_objects(self, commit=True):
        saved_options = super(TestingQuestionFormSet, self).save_new_objects(commit)
        if commit:
            question = saved_options[0].question
            for option in saved_options:
                if option.order == 0:
                    option.order = TestingQuestionOption.objects.filter(question=question).count() + 1
                if option.name == "Auto Generated":
                    option.name = "%s Option %s" % (question, option.order)
                option.save()

            if len(saved_options) < 2:
                order = TestingQuestionOption.objects.filter(question=question).count() + 1
                name = "%s Option %s" % (question, order)
                TestingQuestionOption.objects.create(name=name, order=order, question=question, correct=False)
        return saved_options

    def save_existing_objects(self, commit=True):
        saved_options = super(TestingQuestionFormSet, self).save_existing_objects(commit)
        if commit:
            question = saved_options[0].question
            for option in saved_options:
                if option.order == 0:
                    option.order = TestingQuestionOption.objects.filter(question=question).count() + 1
                if option.name == "Auto Generated":
                    option.name = "%s Option %s" % (question, option.order)
                option.save()

            if len(saved_options) < 2:
                order = TestingQuestionOption.objects.filter(question=question).count() + 1
                name = "%s Option %s" % (question, order)
                TestingQuestionOption.objects.create(name=name, order=order, question=question, correct=False)
        return saved_options

class TestingQuestionCreateForm(forms.ModelForm):
    def save(self, commit=True):
        testing_question = super(TestingQuestionCreateForm, self).save(commit=False)
        if testing_question.order == 0 or testing_question.name == "Auto Generated":
            count = TestingQuestion.objects.filter(module__id=self.data.get("module")).count() + 1
            module = Module.objects.get(id=self.data.get("module"))
            name = "%s Question %d" % (module, count)
            while TestingQuestion.objects.filter(name=name):
                count += 1
                name = "%s Question %d" % (module, count)
            testing_question.name = name
            testing_question.order = count
        testing_question.save()

        question_content = self.cleaned_data.get("question_content")
        testing_question.question_content = process_mathml_content(question_content, 0, testing_question.id)

        answer_content = self.cleaned_data.get("answer_content")
        testing_question.answer_content = process_mathml_content(answer_content, 1, testing_question.id)

        testing_question.save()

        return testing_question

    class Meta:
        model = TestingQuestion