【发布时间】:2016-01-09 10:05:44
【问题描述】:
我目前正在尝试在 Django 表单向导中设置我的表单集的初始变量。但是,不是在表单向导过程开始时设置这些初始变量,而是希望使用表单向导中上一步的数据动态创建它们。
使用 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')
URLS.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')
【问题讨论】:
标签: python django formset django-formwizard