更改默认字段值以编辑QuerySelectField数据

时间:2018-02-23 13:23:15

标签: python flask flask-wtforms

我有一个使用QuerySelectField生成基于相关数据库表的字段的Flask表单。我使用相同的表格"添加"和"编辑"动作。但是,我无法弄清楚如何更改此字段的值" s"默认"用于编辑,以便显示现有记录的值。实际上,在编辑时,默认情况下根本没有显示;没有选择"#34;在形式上。

这是Wine的数据库,其相关表格Size包含:

+---------+--------+-----+
| size_id | size   | seq |
+---------+--------+-----+
|       1 | 750 ml |   3 |
|       2 | 375 ml |   1 |
|       3 | 500 ml |   2 |
|       4 | magnum |   4 |
+---------+--------+-----+

我的表单定义(仅显示"尺寸"内容)是:

class WineForm(FlaskForm):

    def size_choices():
        return Size.query.order_by(Size.seq).all()

    def get_size_default():
        return Size.query.filter(Size.size == '750 ml').one()

    size = QuerySelectField('Size',
                            validators=[Required()],
                            query_factory=size_choices,
                            default=get_size_default)

我的"添加"相关部分中的视图就是

def wine_add():
    form=WineForm(request.form)
    # etc.

这正确显示一个选择字段,其中包含" 750毫升"作为默认值,作为四个列表中的第三个条目。

然而,我的编辑"视图总是默认为" 375毫升",没有"选择"值。 "编辑"视图包括:

def wine_edit(id):
    record = Wine.query.filter(Wine.id == id).one_or_none()

    if record is None:
        flash('Record does not exist')
        return redirect(url_for('index'))
    form = WineForm(obj=record)

这显示" 375毫升"无论。我已经尝试为form.size.dataform.size.default设置值,包括字符串值或整数ID或数据库查询对象;什么都行不通。

作为比较,我为QuerySelectField提供了另一个country(此处未显示);这没有默认设置(数据库顺序很好),并且此字段使用现有记录中的值正确显示。它似乎包含了"默认"在导致此问题的size字段的定义中,但我不知道它应该是什么。

我已经尝试了很多东西来调试这个,没有任何快乐,并且会对任何建议表示感谢。感谢。

0 个答案:

没有答案