我有一个Django SessionWizardView
我希望在这些步骤中为用户添加额外的数据以利用它们。基本上我想建立一个列表,以及一个完成后存储步骤信息的字典。
向导的第一步允许用户添加有关自己的信息,最后允许用户添加其他人的详细信息。如果选择此选项,则呈现另一个条件形式&我想为他们提供使用之前输入数据的选项。
因此,在process_step()
方法中,我正在创建一个列表,然后为流程中的每个步骤创建相应的数据字典。最初我将这些作为类属性,但觉得它们更适合用户的会话,所以我试图像这样添加它们;
def process_step(self, form):
form_data = self.get_form_step_data(form)
current_step = self.storage.current_step or ''
data_dict = self.request.session.get('data_dict', dict())
data_list = self.request.session.get('data_list', list())
if current_step in data_dict:
# Always replace the existing data for a step.
data_dict.pop(current_step)
if not isinstance(form, TermsForm):
entrant_data = dict()
for k, v in form_data.iteritems():
entrant_data[k] = v
for k in entrant_data.iterkeys():
new_key = re.sub('{}-'.format(current_step), u'', k)
entrant_data[new_key] = entrant_data.pop(k)
data_dict[current_step] = entrant_data
done = False
for i, data in enumerate(data_list):
if data[0] == current_step:
data_list[i] = (
current_step, u'{} {}'.format(
entrant_data['first_name'],
entrant_data['last_name']
)
)
done = True
if not done:
data_list.append(
(
current_step, u'{} {}'.format(
entrant_data['first_name'],
entrant_data['last_name']
)
)
)
self.request.session['data_dict'] = data_dict
self.request.session['data_list'] = data_list
self.request.session.modified = True
return form_data
运行此方法后,我的新会话密钥不是会话的一部分。从我一直在阅读的内容来看,这是设置会话数据的有效方法,但我在某个地方犯了错误吗?
答案 0 :(得分:0)
在我的头脑中,你的process_step
函数调用错过了明确的request
parm。它主要被称为:
process_step(self, request, form, step):