我有2天的想法如何制作这个。
我有两种形式(真的是4种),第一种形式有单选按钮,如果用户选择x单选按钮选项,第二种形式将不同。
总是对我的英语抱歉。
生病解释:First Form有一个带单选按钮的选项,选项ill带来“被叫表单”,我有3个表单正在等待。
我正在阅读有关WizardForm的内容,但我不知道如何以动态方式提供第二种形式。
请为此提供一些帮助:(
由于
答案 0 :(得分:2)
如果您阅读contrib/formtools/wizard.py
代码,可能会有所帮助。它非常简单,跟随它会让你更好地了解你需要做什么。
在那里有一个process_step
挂钩,您需要在自己的表单向导中覆盖它。我做的是看看我在做什么步骤进行一些特殊的处理,如果表格经过验证(即它有cleaned_data
):
class MyFormWizard(FormWizard):
def process_step(self, request, form, step):
if step == 0 and hasattr(form, 'cleaned_data'):
# Do special stuff
如果我正确理解了您的问题,您希望第二步根据用户从第一个表单中选择来提供特定表单。在这种情况下,我可能首先尝试为第二步构建动态通用表单,其中使用的字段基于第一个表单的结果(未经测试):
def process_step(self, request, form, step):
if step == 0 and hasattr(form, 'cleaned_data'):
# The initial attribute is a dictionary which maps the step number
# to a dictionary of what should be initial values.
# You can use/abuse this in a form's constructor
self.initial[1] = {'fields': {'field1': field, 'field2': another}}
然后,以你的第二种形式
class MySecondForm(forms.Form):
def __init__(self, *args, **kwargs):
super(StatBuilderForm2, self).__init__(*args, **kwargs)
for name, field in kwargs['initial']['fields'].iteritems():
self.fields[name] = field