从wtforms和flask sqlalchemy中的数据库查询中获取选项

从wtforms和flask sqlalchemy中的数据库查询中获取选项,flask,flask-sqlalchemy,flask-wtforms,Flask,Flask Sqlalchemy,Flask Wtforms,我正在使用Flask、SQLAlchemy和WTForms开发一个web应用程序。我想通过数据库查询选择字段中的选项 更多细节 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) 有什么办法吗?在这种情况下,您可以使用WTForms

我正在使用Flask、SQLAlchemy和WTForms开发一个web应用程序。我想通过数据库查询选择字段中的选项

更多细节

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)

有什么办法吗?

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

def skill_level_choices():      
    return db.session.query(SkillLevel).all()
从wtforms.ext.sqlalchemy.fields导入QuerySelectField

然后创建一个查询数据库并返回所需内容的函数:

def skill_level_choices():      
    return db.session.query(SkillLevel).all()
获得查询对象后,可以使用
query\u factory
参数将其放入
QuerySelectField

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

使用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")

解决方案:

我在
wtforms
peewee
方面也有类似的问题,下面是我的解决方法

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
数据选择保持最新。

这是在forms.py下吗?@m1yag1:那么代码需要包含在
类MyForm(Form)
中吗?谢谢。仅仅查询对象并将其作为选项放在选择字段中是没有意义的。标签是哪个字段?哪个是值?这是使用QuerySelectField,因此它会为您执行此操作。若要使用stock SelectField,则需要将标签和值的元组对传递给选项。这就是为什么它被称为query_factory.Hi@jobinv12!我认为这个答案可以通过添加一个简短的代码描述来改进。