2

我正在写 2 页。我想要做的是,根据在 page1 中选择的数据,生成一个带有 MultipleChoiceField 的表单,该表单具有由 page1 结果计算的选项。或者读取相应的文件也可以,只是为了在 page2 表单中获取 MultipleChoiceField 的选项。

我正在使用表单模板,在 forms.py 中,在 page2 的表单类中,

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

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

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

那我该怎么办?我对网站设计很陌生,希望有人可以帮助...

4

1 回答 1

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

于 2012-10-31T13:56:23.957 回答