如何根据第1页的选择在第2页生成动态多回声场选项?

2024-07-05 14:33:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写两页。我要做的是,根据page1中选择的数据,生成一个带有multipleechoicefield的表单,该表单具有page1 result计算的选项。根据icefield中的选项,也可以选择多个选项。在

我正在使用表单模板,并且表单.py,在第2页的窗体类中

class FormPage2(forms.Form): 
    forms.MultipleChoiceField(label='sth to choose',choices=get_tochoose_choices())

get_tochoose_choices()正在读取某些txt文件以获取选项。在

但是当我加载第一个页面时,(我认为python会实例化所有的表单,不管它是否在这个页面上),这个文件不存在,这意味着FormPage2不能被实例化。即使文件在那里,也不是最新的。在

那我该怎么办?我是相当新的网站设计,希望有人可以帮助。。。在


Tags: 文件数据实例表单get选项forms页面
1条回答
网友
1楼 · 发布于 2024-07-05 14:33:10

我相信你要做的是根据第一个表单中选择的选项动态地构建你的第二个表单。在

我不得不为我的一个项目做类似的事情,发现这个链接非常有用: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来初始化选择

相关问题 更多 >