Две вещи, которые значительно улучшат Ваши vi навыки:
Сначала просто несколько общих советов - если вы не понимаете, как что-то использовать в Django, вытащите этот текстовый редактор и посмотрите на код. Это не всегда самый быстрый способ получить ответ, но я считаю, что в конечном итоге он приносит свои плоды.
Попробуйте добавить дополнительный_контекст на второй шаг, переопределив process_step в своем подклассе FormWizard. Вот комментарии из FormWizard (django 1.1):
def process_step(self, request, form, step):
"""
Hook for modifying the FormWizard's internal state, given a fully
validated Form object. The Form is guaranteed to have clean, valid
data.
This method should *not* modify any of that data. Rather, it might want
to set self.extra_context or dynamically alter self.form_list, based on
previously submitted forms.
Note that this method is called every time a page is rendered for *all*
submitted steps.
"""
pass
так что в вашем собственном классе ContactWizard что-то вроде (NB: я не запускал это):
class ContactWizard(FormWizard):
def process_step(self,request,form,step):
if step == 1:
self.extra_context = {'whatever': form.whatever_you_want_from_the_form}
return
else:
return
Не знаю, полезно ли еще публиковать это решение. Тем не менее. Необходимые вещи между различными формами (шагами), используемыми мастером, легко доступны, если дать мастеру дополнительный атрибут в виде dict. Например, так:
class WizardRegistration(FormWizard):
def __init__(self, *args, **kwargs):
super(WizardRegistration, self).__init__(*args, **kwargs)
setattr(self, 'chosen', {})
Между шагами вы можете легко брать значения формы или модели и хранить их до тех пор, пока не достигнете метода done(). Сохранить значение формы
self.chosen['something_to_store'] = form.cleaned_data.get('a_form_value')
Или даже получить/изменить/сохранить модель:
object = Model.objects.get('some_query')
if self.chosen['object']:
self.chosen['object'].string = 'Something stringy'
self.chosen['object'].save()