代码之家  ›  专栏  ›  技术社区  ›  Tri

如何用烧瓶wtf获得selectfield电流值

  •  0
  • Tri  · 技术社区  · 6 年前

    我用 烧瓶WTF ,以下是我的代码片段:

    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)
    

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

    enter image description here

    但是,如果数据库上的当前用户性别值是女性,那么每当我刷新浏览器时,表单都不会获得当前值。

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

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

    我试图通过以下方式获取当前值:

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

    但它没有预先填充当前用户性别的当前值。

    因此,我希望在selectfield上显示当前值,或者根据数据库上的当前用户值预填充selectfield。

    2 回复  |  直到 6 年前
        1
  •  1
  •   SuperShoot npburns224    6 年前

    通过 student EditStudentForm 作为 obj 关键字参数,例如:

    student_form = EditStudentForm(obj=student_form)
    

    为什么?从 WTForms docs :

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

    当您在处理 GET 请求时,没有表单数据,因此它将使用对象数据。

        2
  •  1
  •   Jessi    6 年前

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

    @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)
    
    推荐文章