【问题标题】:Flask - WTForm - Using Query results as RadioField ChoicesFlask - WTForm - 使用查询结果作为 RadioField 选择
【发布时间】:2016-07-05 05:43:18
【问题描述】:

参考以下表格。

CONTROL_CHOICES = Session.query(schema.OfficeType).order_by(schema.OfficeType.descr).all()
CONTROL_CHOICES = [(office.id, office.descr) for office in CONTROL_CHOICES]

class ControlForm(Form):

    institution = RadioField('Institution', choices=CONTROL_CHOICES)

    date = DateField('Date')
    submit = SubmitField('SUBMIT')

简单的 HTML

<form action="composition_profile" method="get">
        {{control_form.hidden_tag()}}
        {{control_form.institution.label}}
        {{control_form.institution}}
        {{control_form.date.label}}
        {{control_form.date}}
        {{control_form.submit}}

    </form>

单选字段打印成功。

但是,在填写表单时,validate_on_submit() 不会打印错误,但不会执行 if 内的代码

validate() 打印以下错误。

{'机构': ['不是一个有效的选择']}

@app.route('/composition_profile', methods=['GET', 'POST'])
def composition_profiles():
    if request.method == 'GET':
        if request.args.get('institution') and request.args.get('date'):
            form = ControlForm(request.args)
            print(form.institution.data)

            if form.validate():

                print('terms')
            print(form.errors)

知道它是如何导致不正确的选择的吗?我不确定发生了什么。将其更改为 QuerySelectField 可以,但我想要收音机功能

【问题讨论】:

  • print(form.institution.data) 语句打印出什么?
  • 无线电场的描述 IE GovernorPresident 似乎切换到 [(office.descr,office.descr) for ....] 是有效的,但它导致我需要在我的查询中额外加入,因为我必须取回描述中的 ID

标签: python flask wtforms


【解决方案1】:

考虑重构:

def my_view():
    class F(MyBaseForm):
        pass

    F.username = TextField('username')
    for name in iterate_some_model_dynamically():
        setattr(F, name, TextField(name.title()))

    form = F(request.POST, ...)
    # do view stuff

来源:http://wtforms.simplecodes.com/docs/1.0.1/specific_problems.html#dynamic-form-composition

【讨论】:

  • 这是一个不错的 sn-p,谢谢,但似乎直接问题更多是直接整数输入的结果。我不知道为什么它不能处理1 vs '1'
  • 试试这个,institution = RadioField('Institution', choices=CONTROL_CHOICES, coerce=int)。 IMO 我认为它比用str 包装更好的代码(如果它甚至可以工作的话)。 来源stackoverflow.com/questions/13964152/…
【解决方案2】:

问题似乎是由于 WTForm 期望 Value 字段是 String 而不是 Integer 而引起的

变化

CONTROL_CHOICES = [(office.id, office.descr) for office in CONTROL_CHOICES]

CONTROL_CHOICES = [(str(office.id), office.descr) for office in CONTROL_CHOICES]

缓解问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多