预填充(查询)SelectField - WTForms?

时间:2017-01-23 23:58:12

标签: python flask flask-sqlalchemy wtforms flask-wtforms

我正在尝试使用WTForms预先填充选择字段。 我想使用数据库中的数据预先填充选择字段(值和标签)。

数据库:

+----+----------+-------------------------------------+--------+
| id | category | description                         | status |
+----+----------+-------------------------------------+--------+
|  1 | Cinema   | About movies                        |      1 |
|  2 | Play     | About music.                        |      0 |
|  3 | News     | Breaking news                       |      1 |
+----+----------+-------------------------------------+--------+

我想要 QuerySelectField 等效于此:

class MyForm(Form):
    category = SelectField(u'Category', choices=[('1', 'Cinema'), ('3','News')])

到目前为止我已经这样做了:

def getCategories():
    return Category.query.filter_by(status=1).all()

class MyForm(Form):
    category = QuerySelectField(u'Category',
            [validators.Required()],
            query_factory = getCategories
            )

标签的呈现方式如下:

<select class="form-control" id="category" name="category">
<option value="1">&lt;models.Category object at 0x105064910&gt;</option>
<option value="3">&lt;models.Category object at 0x105064d50&gt;</option>
</select>

2 个答案:

答案 0 :(得分:1)

你做得很好。 QuerySelectField使用Model对象的字符串表示形式进行显示。只需在类别模型中添加__str__函数即可返回类别名称。

def __str__(self):
    return self.name

答案 1 :(得分:1)

我想你可以试试这段代码

categorie=QuerySelectField(query_factory=lambda:Category.query.filter_by(status=1).all(),get_label="name")

在您的表单中 你可以找到更多这个令人敬畏的turorial他们使用它simpe crud app with forms