Python 在Django Formwizard中设置Formset Initial
我目前正试图在Django formwizard中设置我的formset的初始变量。但是,我希望使用表单向导中上一步的数据动态创建这些初始变量,而不是在表单向导过程开始时设置这些初始变量 使用get_initial_form方法,我能够动态地设置表单集中第一个表单的初始变量。我想动态设置表单集中的所有表单。这可能吗 VIEWS.PYPython 在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
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
值所需的尽可能多的条目