Python 在Django Formwizard中设置Formset Initial

Python 在Django Formwizard中设置Formset Initial,python,django,formset,django-formwizard,Python,Django,Formset,Django Formwizard,我目前正试图在Django formwizard中设置我的formset的初始变量。但是,我希望使用表单向导中上一步的数据动态创建这些初始变量,而不是在表单向导过程开始时设置这些初始变量 使用get_initial_form方法,我能够动态地设置表单集中第一个表单的初始变量。我想动态设置表单集中的所有表单。这可能吗 VIEWS.PY class ContactWizard(SessionWizardView): def get_context_data(self, form, **kw

我目前正试图在Django formwizard中设置我的formset的初始变量。但是,我希望使用表单向导中上一步的数据动态创建这些初始变量,而不是在表单向导过程开始时设置这些初始变量

使用get_initial_form方法,我能够动态地设置表单集中第一个表单的初始变量。我想动态设置表单集中的所有表单。这可能吗

VIEWS.PY

 class ContactWizard(SessionWizardView):
    def get_context_data(self, form, **kwargs):
            context = super(ContactWizard, self).get_context_data(form=form, **kwargs)
            if int(self.steps.current) == 1:
                    context.update({'foo': self.get_cleaned_data_for_step('0')})
            return context

    def get_form_initial(self, step, **kwargs):
            initial = self.initial_dict.get(step, {})
            if int(step) == 1:
                    form_class = self.form_list[step]
                    num_of_dates =  self.get_cleaned_data_for_step(str(int(step) - 1))['date'].split(',')
                    form_class.extra = len(num_of_dates)-1

                    initial.update({'slots': 4})
            return super(ContactWizard, self).get_form_initial(step)

    def get_template_names(self):
            return [TEMPLATES[self.steps.current]]

    def done(self, form_list, **kwargs):
            print 'testing'
            return HttpResponseRedirect('main/home.html')
url.PY

   url(r'^schedule/date/$', views.ContactWizard.as_view([ScheduleDate, formset_factory(ScheduleEventForm)]), name='schedule_date'),
FORMS.PY

 class ScheduleEventForm(forms.Form):
    time = forms.TimeField(label='Time', widget=forms.TextInput(attrs={'class': 'form-control time_entry_field'}))
    slots = forms.IntegerField(label='Slots', widget=forms.TextInput(attrs={'class': 'form-control slot_field'}))
    date = forms.CharField(label='', widget = forms.HiddenInput())
    class Meta:
            fields = ('time','slots')

我不确定在
get\u form\u initial
中设置
extra
是否正确。看看什么调用
get\u form\u initial
,即
get\u form
,您最好在
get\u form\u kwargs
中设置
extra
,因为它的返回将用于表单类的生成

我问了这个问题,想知道如何在表单集中设置字段的初始值。如果我尝试更新
initial
,我最终会在表单集中没有初始表单,并导致崩溃。在进行交互式调试时,它几乎就像希望
initial
是一个dict列表,集合中的每个表单对应一个dict

经过进一步的调查,似乎如果您想为表单集中的字段设置一个初始值,您需要传回一个dict数组,每个预期的额外字段都有一个条目。这实际上似乎是
BaseModelFormSet
(请参见
\u-construct\u-form
)和
BaseFormSet
中的一种行为,但是
BaseFormSet
如果找不到特定条目(至少对于1.10,无论如何)会更好地处理错误


因此,一旦你确定了你的
extra
值,你就需要用相同的dict来填充一个列表,按照
extra
值的要求填写尽可能多的条目。

我不确定在
get\u form\u initial
中设置
extra
是否正确。看看什么调用
get\u form\u initial
,即
get\u form
,您最好在
get\u form\u kwargs
中设置
extra
,因为它的返回将用于表单类的生成

我问了这个问题,想知道如何在表单集中设置字段的初始值。如果我尝试更新
initial
,我最终会在表单集中没有初始表单,并导致崩溃。在进行交互式调试时,它几乎就像希望
initial
是一个dict列表,集合中的每个表单对应一个dict

经过进一步的调查,似乎如果您想为表单集中的字段设置一个初始值,您需要传回一个dict数组,每个预期的额外字段都有一个条目。这实际上似乎是
BaseModelFormSet
(请参见
\u-construct\u-form
)和
BaseFormSet
中的一种行为,但是
BaseFormSet
如果找不到特定条目(至少对于1.10,无论如何)会更好地处理错误

因此,一旦确定了
extra
值,就需要用相同的dict填充一个列表,以容纳
extra
值所需的尽可能多的条目