如何使用Flask中的字典创建动态选择表单?

2024-06-07 09:22:39 发布

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

我在字典中有一个列表,其结构如下:

spotDictionary = {Firm, {Product, [Spot]}}

我想有3个选择领域公司,产品,现货。从左到右,用户应该从中选择一个。每个选择字段都应动态填充与公司或产品对应的选项。

换句话说,当我选择FirmA时,我应该只看到FirmA的产品。当我选择FirmA的相应产品时,我应该只得到该产品的斑点。填写完所有3个选择字段后,用户可以提交表单。在

下面是我如何创建公司列表,我将其作为第一个选择字段(公司)的选择。我想在下面的选择字段中使用类似的逻辑。我不想查询数据库,因为我已经有一个spotDictionary。

^{pr2}$

一旦用户选择了一家公司,下一个选择字段的选项应该是“公司产品”和“仅公司产品”。一旦用户选择了一个产品,这一点应该是相同的。


Tags: 用户列表字典产品选项公司动态product
1条回答
网友
1楼 · 发布于 2024-06-07 09:22:39

我最近做了一些类似的事情,在同一个模板中使用多个表单和多个render_template调用。其中每个表单在更改时提交并填充下一个表单。在

如果不想多次调用db,可以将其存储在session变量中。在

这不是经过测试的,但大致如下:

class Firm(FlaskForm):
    firm = SelectField('firm', coerce=str, validators=[InputRequired()])
class Prod(FlaskForm):
    prod = SelectField('prod', coerce=str, validators=[InputRequired()])
class Spot(FlaskForm):
    spot = SelectField('spot', coerce=str, validators=[InputRequired()])

@app.route
def route(): 

    if form1.validate_on_submit():
        form2.prod.choices = session.data.prodlistfunction
        return render_template("/", form1=form1, form2=form2, form3=form3)

    if form2.validate_on_submit():
        form3.spot.choices = session.data.spotlistfunction
        return render_template("/", form1=form1, form2=form2, form3=form3)

    if form3.validate_on_submit():
        do.something()

    data=db.call()
    session.data = data
    form1 = Firm()
    form2 = Prod()
    form3 = Spot()
    form1.choices = data.somefunction()  
    # give other forms blank choices to start off with
    form2.choices = ["",""]
    form3.choices = ["",""]   

    return render_template("/", form1=form1, form2=form2, form3=form3)

然后对于模板来说

^{pr2}$

相关问题 更多 >

    热门问题