Python:SelectField“不是一个有效的选择”

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

form.朋友

class Confirm(CSRFForm):
    monitor_updates = SelectField(
        lazy_gettext("Monitor updates of an app"),
        validators=[validators.Optional()], choices=[], coerce=int
    )

view.朋友

def upload_confirm():
    form = Confirm()

    if form.validate_on_submit:
        if form.monitor_updates.data == 0:
            current_workflow.installation_source.monitor_updates_id = None
            db.session.commit()
        else:
            current_workflow.installation_source.monitor_updates_id = form.monitor_updates.data
            db.session.commit()

    choices = [(app[1][0], app[1][1]) for app in list_choices]
    form.monitor_updates.choices =[(0, "Nothing matches")]
    form.monitor_updates.choices += choices

models.朋友

class InstallationSource(db.Model):

    monitor_updates_id = db.Column(db.Integer, db.ForeignKey('updates_software.id'))

填写表单并在下拉列表中选择“Nothing matches”时,值为0,我收到错误。

screenshot

如果选择其他值,则保存正确。我只能使用数字0,因为所有其他数字都可以被占用

python flask wtforms flask-wtforms
1个回答
2
投票

你需要逻辑选择

    choices = [(app[1][0], app[1][1]) for app in list_choices]
    form.monitor_updates.choices =[(0, "Nothing matches")]
    form.monitor_updates.choices += choices

form.validate_on_submit()方法之前来:

def upload_confirm():
    form = Confirm()

    choices = [(app[1][0], app[1][1]) for app in list_choices]
    form.monitor_updates.choices =[(0, "Nothing matches")]
    form.monitor_updates.choices += choices

    if form.validate_on_submit():
        if form.monitor_updates.data == 0:
            current_workflow.installation_source.monitor_updates_id = None
            db.session.commit()
        else:
            current_workflow.installation_source.monitor_updates_id = form.monitor_updates.data
            db.session.commit()
© www.soinside.com 2019 - 2024. All rights reserved.