从wtforms和flask-sqlalchemy

时间:2016-02-10 11:35:27

标签: flask flask-sqlalchemy flask-wtforms

我正在使用Flask,SQLAlchemy和WTForms开发Web应用程序。我希望通过我的数据库从查询中选择 SelectField

了解更多详情。

my_query = my_table.query.with_entities(My_Entities).all()

结果

  

[(u' 1',),(u' 2',),(u' 3',)]

我的班级

class MyForm(Form):
    My_Var = SelectField(choices=RIGHT_HERE)

有什么办法吗?

3 个答案:

答案 0 :(得分:3)

在这种情况下,您可以使用WTForms中的扩展。您要做的是导入所需的QuerySelectField

from wtforms.ext.sqlalchemy.fields import QuerySelectField

然后你创建一个函数来查询数据库并返回你需要的东西:

def skill_level_choices():      
    return db.session.query(SkillLevel).all()

获得查询对象后,可以使用QuerySelectField参数将其放入query_factory

skill_level = QuerySelectField(u'Skill level',      
                               validators=[Required()],
                               query_factory=skill_level_choices)

答案 1 :(得分:1)

使用Databaase中的值填充QuerySelectField

from wtforms.ext.sqlalchemy.fields import QuerySelectField

from flask_sqlalchemy import SQLAlchemy
name=QuerySelectField('Name',query_factory=lambda:my_table.query,get_label="username")

答案 2 :(得分:0)

解决方案:

我在wtformspeewee上遇到了类似的问题,这是我的解决方法

class MyForm(FlaskForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.my_select_field.choices = [
            (el.id, el.description) for el in MyModel.select()
        ]

    my_select_field = SelectField("Field", coerce=int)

说明:

我们修改了原始FlaskForm,以便在每次创建数据库时都执行数据库查询。

因此MyForm数据选择保持最新。