В настоящее время я пытаюсь установить начальную переменную своего набора форм в мастере форм 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')