我正在尝试在Django表单向导中设置formset的初始变量。但是,我不希望在表单向导过程开始时设置这些初始变量,而是希望使用表单向导中上一步中的数据动态创建这些变量。在
使用get_initial_form方法,我可以动态地设置formset中第一个form的初始变量。我想动态设置窗体集中的所有窗体。这可能吗?在
在视图.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')
在网址.PY在
^{pr2}$在表单.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')
我不确定在},因为返回的值将用于生成form类。在
get_form_initial
中设置extra
是否合适。看看调用get_form_initial
,即get_form
,最好在get_form_kwargs
中设置{我是通过这个问题来寻找我自己的答案,如何在表单集中设置字段的初始值。如果我尝试更新
initial
,那么我的表单集中没有初始表单,并且会崩溃。在进行交互式调试时,它几乎就像期望initial
是一个dict列表,集合中的每个表单对应一个dict。在经过进一步的研究,如果您想为表单集中的字段设置一个初始值,那么您需要传回一个dict数组,其中每个dict都有一个条目。这实际上似乎是
BaseModelFormSet
(请参见_construct_form
)和BaseFormSet
中的一种行为,但是如果找不到特定的条目,BaseFormSet
会更好地处理错误(至少对于1.10)。在因此,一旦确定了
extra
值,就需要用相同的dict填充一个列表,以满足extra
值所需的数量。在相关问题 更多 >
编程相关推荐