【问题标题】:How to get SelectField current value with Flask WTF如何使用 Flask WTF 获取 SelectField 的当前值
【发布时间】:2019-09-07 03:32:49
【问题描述】:

我使用 Flask-WTF 制作了一个性别表格,这是我的代码的 sn-p:

class Gender(enum.Enum):
    Male = 'Male'
    Female = 'Female'

    def __str__(self):
        return self.value

gender = [(str(y), y) for y in (Gender)]

class EditStudentForm(Form):
    gender = SelectField('Gender', choices=gender)

@app.route('/edit_student')
def edit_student():
    student = Student.query.filter_by(id=student_id).first()
    student_form = EditStudentForm()
    # ... validate on submit
        # ....
        # ....
    return render_template(student=student, student_form=student_form)

该代码已经可以工作,包括我可以将数据插入数据库。

但是,如果数据库上的当前用户性别值为女性,则每当我刷新浏览器时,表单都没有获取当前值。

在 HTML 中我希望它是这样的:

// edit form
<form>
  <input type="" value="currentUserValueFromDatabase">
</form>

我尝试使用这种方式获取当前值:

{{ f.render_field(student_form.gender, value=student.gender) }}

但它没有根据当前用户性别预填充当前值。

所以我想要的是在选择字段上显示当前值或根据数据库上的当前用户值预填充选择字段。

【问题讨论】:

    标签: flask flask-wtforms wtforms


    【解决方案1】:

    student 作为obj 关键字参数传递给EditStudentForm,例如:

    student_form = EditStudentForm(obj=student_form)
    

    为什么?来自WTForms docs

    obj – 如果formdata 为空或未提供,则检查此对象 匹配表单字段名称的属性,将用于字段 价值观。

    在处理GET请求时构造表单时,没有表单数据,所以会使用对象数据。

    【讨论】:

    • 哇,它就像我想要的那样工作,非常感谢伙计:)
    【解决方案2】:

    我认为您需要在将表单对象传递给模板之前设置性别字段的默认值。试试下面。

    @app.route('/edit_student')
    def edit_student():
        student = Student.query.filter_by(id=student_id).first()
        student_form = EditStudentForm()
        # set default
        student_form.gender.default = student.gender
        # process it to propagate the change.
        student_form.process() 
        # ... validate on submit
            # ....
            # ....
        return render_template(student_form=student_form)
    

    【讨论】:

    • gender 字段上,它现在可以工作,但我在其他字段上遇到了问题:imgfly.me/i/XoX0nS。但是,非常感谢您参与回答我的问题。
    猜你喜欢
    • 2023-04-02
    • 2013-05-24
    • 2012-12-20
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 2019-04-25
    • 1970-01-01
    相关资源
    最近更新 更多