get_context_data()
我认为,更合适的get_form()
方法是在向导视图中实现方法,并根据步骤和先前的数据返回不同的表单实例,而不是更改中的表单列表等。
像这样:
class UserServiceWizard(SessionWizardView):
instance = None
def get_form(self, step=None, data=None, files=None):
if step is None:
step = self.steps.current
prev_data = self.get_cleaned_data_for_step(self.get_prev_step(
self.steps.current))
if step == '1':
service_name = str(prev_data['provider']).split('Service')[1]
form_class = class_for_name('th_' + service_name.lower() + '.forms',
service_name + 'ProviderForm')
form = form_class(data)
elif step == '3':
service_name = str(prev_data['consummer']).split('Service')[1]
form_class = class_for_name('th_' + service_name.lower() + '.forms',
service_name + 'ConsummerForm')
form = form_class(data)
else:
form = super(UserServiceWizard, self).get_form(step, data, files)
return form
这里的技巧是不更改表单列表的长度(您已正确完成),而只是更改表单实例。Djangoget_form()
为此提供了重写方法的方法。Django将采用此方法,并始终使用它来获取该方法的表单实例。