我正在写2页。我想要做的是,根据第1页中选择的数据,生成一个表单,其中MultipleChoiceField具有由page1结果计算的选项。或者根据文件读取也很好,只是为了获得第2页形式的MultipleChoiceField选项。
我正在使用表单模板,在forms.py中,在page2的表单类中,
class FormPage2(forms.Form):
forms.MultipleChoiceField(label='sth to choose',choices=get_tochoose_choices())
get_tochoose_choices()正在读取一些txt文件以获取选项。
但是当我加载第一页时,(我认为python实例化了所有表单,无论它是否在这个页面上或不在一起),这个文件不存在,这意味着FormPage2无法实例化。即使文件存在,也不是最新文件。
那我该怎么办?我对网站设计很陌生,希望有人能帮忙...
答案 0 :(得分:1)
我相信你要做的是根据第一个选项中的选项动态构建第二个表单。
我必须为我的某个项目执行类似操作,并发现此链接非常有用:http://jacobian.org/writing/dynamic-form-generation/
您需要覆盖第二种方法的__init__
方法,从而在初始化该表单时初始化选项。
第二种形式的代码应该是这样的......
def __init__(self, *args, **kw):
#first remove my custom keyword from the list of keyword args
try:
customer = kw['customer']
kw.pop('customer')
except:
customer=None
super(forms.Form, self).__init__(*args, **kw)
#now we dynamically add the customer choices - accepts partners as an input
partners = get_partner_list(customerid=customer.id)
self.fields['customer'].choices = [(p.id, p.customername) for p in partners]
从第一个表单接收输入后,您可以将其作为关键字参数传递给第二个表单。
然后在第二个表单的__init__
中弹出该关键字参数,并使用它通过编辑self.fields['fieldneedsdynamicchoices'].choices
来初始化选项