在Formwizard中动态填充ChoiceField Formset

时间:2019-05-12 02:07:04

标签: django django-forms django-formwizard

我正在尝试使用上一步中的信息填充FormSet中的ChoiceField(与我最后一个提出的问题有关)。我快到了,但似乎无法初始化列表:

def get_form(self, step=None, data=None, files=None):

        form = super(FormWizardView, self).get_form(step, data, files)

        step = step or self.steps.current

        if step == 'pages':
            form_class = self.form_list[step]
            form1_cleaned_data = self.get_cleaned_data_for_step('agenda')
            formset = PagesFormSet()

            loan_choices = []


            for form in formset.forms:
                if form1_cleaned_data:
                    form.fields['agenda_select'].choices = [item for item in form1_cleaned_data.items()]

            # print(form.fields['agenda_select'])

            return PagesFormSet(data = data)

        return super(FormWizardView, self).get_form(step, data, files)

列表没有显示。但是,可以在控制台中进行打印。如果我只返回formset而不是PagesFormSet,则列表会填充。但是,该列表无效,因此我无法继续进行下一步(如果我再添加data = data也是如此。我认为我应该向return PagesFormSet(data = data)添加一些额外信息,但是我只是没有头绪。

因为我一直盯着这个问题一天,所以我希望得到一些帮助。非常感谢!

1 个答案:

答案 0 :(得分:0)

我找到了答案!我所做的是返回表单集而不是PagesFormSet。但是,在启动formset时,我已经给了PagesFormset所需的数据。显然,这意味着表单集既包含数据,也包含来自选择项的额外信息。供以后参考:

def get_form(self, step=None, data=None, files=None):

        form = super(FormWizardView, self).get_form(step, data, files)

        step = step or self.steps.current

        if step == 'pages':
            form_class = self.form_list[step]
            form1_cleaned_data = self.get_cleaned_data_for_step('agenda')
            formset = PagesFormSet(data = data)

            loan_choices = []


            for form in formset.forms:
                if form1_cleaned_data:
                    form.fields['agenda_select'].choices = [item for item in form1_cleaned_data.items()]

            # print(form.fields['agenda_select'])

            return formset

        return super(FormWizardView, self).get_form(step, data, files)