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

Python 更改编辑QuerySelectField数据的默认字段值,python,flask,flask-wtforms,Python,Flask,Flask Wtforms,我有一个Flask表单,它使用QuerySelectField根据相关数据库表生成一个字段。我对添加和编辑操作使用相同的表单。但是,我不知道如何更改此字段的编辑默认值,以便它显示现有记录的值。事实上,在编辑时,默认值根本不显示;表单中根本没有选定项 这是一个葡萄酒数据库,其相关表格大小包含: +---------+--------+-----+ | size_id | size | seq | +---------+--------+-----+ | 1 | 750 ml |

我有一个Flask表单,它使用QuerySelectField根据相关数据库表生成一个字段。我对添加和编辑操作使用相同的表单。但是,我不知道如何更改此字段的编辑默认值,以便它显示现有记录的值。事实上,在编辑时,默认值根本不显示;表单中根本没有选定项

这是一个葡萄酒数据库,其相关表格大小包含:

+---------+--------+-----+
| 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)
在相关部分,我的add观点很简单

def wine_add():
    form=WineForm(request.form)
    # etc.
这将正确显示一个选择字段,默认值为750 ml,作为四个列表中的第三个条目

但是,“我的编辑视图”始终默认为375 ml,没有选定值。编辑视图包括:

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.data和form.size.default设置值,包括字符串值、整数ID或数据库查询对象;什么都不管用

作为比较,我有另一个QuerySelectField,这里没有为country显示;这没有默认设置,数据库顺序正常,并且此字段与现有记录中的值一起正确显示。似乎是因为在大小字段的定义中包含了默认值,导致了这个问题,但我不知道应该是什么


我已经尝试了很多东西来调试这个,没有任何乐趣,如果有任何建议,我将不胜感激。谢谢。

你能证明Wine对象的大小确实有一个值吗?obj=记录正确,并将显示该记录上保存的当前值。如果您包含模型代码,它可能会变得更清晰,因为问题很可能在您的关系中。原因是,如果您在selectfield上获得第一个选项,则可能意味着form.size.data为None,您可以在渲染之前打印出该值,然后对代码进行模板化以显示该值。是的,我在视图中添加了一些调试代码,所以当我在表单实例化后添加时,打印“表单大小:”,form.SIZE打印“表单大小数据:”,form.SIZE.data打印“记录大小:”,record.size我得到:表单大小:375 ml500 ml750 mlmagnum表单大小数据:4记录大小:4所以它应该是magnum,它确实有一个值,但它显示375 ml,这是选择的第一个选项。很抱歉格式化。您好!你是如何解决这个问题的?我是完全一样的。。。C