首页 > 解决方案 > 在 Formwizard 中动态填充 ChoiceField Formset

问题描述

我正在尝试使用上一步中的信息填充 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),但我只是不知道。

我希望得到一些帮助,因为我已经盯着这个问题看了一天。非常感谢!

标签: djangodjango-formsdjango-formwizard

解决方案


我找到了答案!我所做的是返回表单集而不是 PagesFormSet。但是,我在启动表单集时已经给了 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)

推荐阅读