gpt4 book ai didi

django - 如何在 Django Formwizard 1.4 中动态重复步骤?

转载 作者:行者123 更新时间:2023-12-03 17:54:46 24 4
gpt4 key购买 nike

我正在尝试根据步骤中的复选框有条件地重复 Django Formwizard (Django 1.4) 中的一个步骤。该表单创建一个对象,并有一个复选框(希望如此)允许他们重复该步骤并创建具有相同表单的相同模型的另一个对象。

我看到了这个答案:Django FormWizard Dynamically Alter form_list但不幸的是,我认为它只适用于旧版本的 FormWizard。

process_step 函数不再具有 form_list 属性。它也没有当前步骤属性(或步骤属性),但我可以通过表单的 QueryDict 访问当前步骤。它包含一个表格字典,但我认为在该字典中插入另一个步骤不会做任何事情,不幸的是,由于它是一个字典而不是一个列表,我必须在插入它之后修改每个步骤的键。

那么,有没有一种使用 Django 1.4 FormWizard 将新步骤添加到表单列表中的好方法?

更新 - 开始认为覆盖 get_next_step(self, step) 可能是要走的路,但任何输入都非常感谢。

更新 #2 -- 尝试使用 get_next_step,但无法将新表单插入实例的 form_list。并不意味着这是不可能的 - 想法?

最佳答案

嗯,我想到了一些东西。您可以覆盖 get_form_list 以将内容插入表单列表,但您必须将它们保存在 self.form_list 中,并且只返回 form_list。就我的目的而言,这没问题,但如果您也使用 conditional_dict,则此处必须小心。

def get_form_list(self):
s = self.storage.current_step
s_data = self.get_cleaned_data_for_step(s) or {}
add_another = s_data.get('add_another', False)
if add_another is True:
index = self.form_list.keyOrder.index(s)+1
key = "add_another-{0}".format(index)
self.form_list.insert(index, key,
wizard_forms.Wizard4)
form_list = super(Wizard, self).get_form_list()
return form_list

我可能会稍微清理一下,但这就是要点。前几行获取当前步骤并获取用于确定是否在此步骤之后插入另一个步骤的标志。如果该标志为真,我们将获取表单中当前步骤的索引,向其添加一个,然后在该索引处插入(在给定索引之前插入插入)。我们使用基于索引的键,这样无论步骤重复多少次,我们都不会得到重叠的键。然后,我们将新步骤插入到 self.form_list 中,使其在实例范围内,在 self(具有新的 self.form_list)上调用 get_form_list,并根据需要返回 form_list。

一些注意事项:
  • 您必须使用 self.storage.current_step 而不是 self.steps.current 因为后者会导致无限递归。
  • 我们在初始化后使用 self.form_list 的事实意味着如果您使用 conditional_dict,事情可能会变得有点困惑。也就是说,它们很可能不会,因为 conditional_dict 将键分配给条件,并且我们的 form_list 中的键都没有改变,只是索引。

  • 嗯,就是这样!显然,您需要在 done() 中添加一些逻辑来弄清楚如何保存其中的每一个,但这特定于您正在做什么。

    关于django - 如何在 Django Formwizard 1.4 中动态重复步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13052224/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com