使用 Flask 和 WTForms,SelectField 具有一个 {label: list} 对的字典。提交表格时,如何访问所选项目的标签?

问题描述 投票:0回答:1

我有一个用 Flask 和 WTFforms 制作的表单中的

SelectField

SelectField
是通过字典中的选项创建的,
{label:list}

问题是:因为在该字典中的某些列表中存在相同的字符串,所以我需要一种方法来访问用户选择所属的标签。

以下是我的flask应用程序的views.py中的配对版本,不包含功能所需的一些内容。

from userClass import UserForm

@ bp.route('/', methods['GET', 'POST'])
def index():


    # initializing the form

    form1 = UserForm()


    # if selectProfile clicked

    if form1.selectProfile.data and form1.validate():
        data = form1.displayUserAge.data
            return data

以下内容来自我的form.py。


userAge = {"Male": ["19-30y", "31-50y"], "Female": ["19-30y", "31-50y"]}

class UserForm(FlaskForm):
    displayUserAge = SelectField(u"Age", choices = userAge)

这是使用 Jinjia 的 index.html 中的相关部分:


{{ form1.hidden_tag() }}
{{ form1.displayUserAge.label }}
{{ form1.displayUserAge }}
{{ form1.selectProfile }}


使用

form1.displayUserAge.data
返回(例如)“19-30y”,但不指示用户选择男性还是女性。

使用

form1.displayUserAge.choices
返回所有选择,但显然不表明用户选择了什么。

一个技巧可能是让选择更详细,并制作一个选择列表而不是字典,即 [“男性 19-30 岁”,“男性 31-50 岁”,“女性 19-30 岁”,“女性 31-50 岁” ”]。但这使下拉菜单变得混乱。

flask flask-wtforms
1个回答
0
投票

为了在选择字段中创建结构,使用

<optgroup>
元素,其标签无法通过表单对象访问。

可以对嵌入的

<option>
元素使用两个参数,第一个参数设置 value 属性,第二个参数显示为文本。为了实现这一点,有必要在字典中分配元组列表。然后可以在用分隔符与年龄分隔的第一个值中定义性别。

class UserForm(FlaskForm):
    age = SelectField(
        'Age', 
        choices={
            '': [('', 'Please select your age')], 
            'Female': [('f_19-30y', '19-30y'), ('f_31-50y', '31-50y')], 
            'Male': [('m_19-30y', '19-30y'), ('m_31-50y', '31-50y')], 
        }, 
        validators=[DataRequired()]
    )

@app.route('/', methods=['GET', 'POST'])
def index():
    form = UserForm(request.form)
    if form.validate_on_submit():
        gender, age = form.age.data.split('_', 1)
        print(gender, ' - ', age)
    return render_template('index.html', **locals())
© www.soinside.com 2019 - 2024. All rights reserved.