我有一个使用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.data
和form.size.default
设置值,包括字符串值或整数ID或数据库查询对象;什么都行不通。
作为比较,我为QuerySelectField
提供了另一个country
(此处未显示);这没有默认设置(数据库顺序很好),并且此字段使用现有记录中的值正确显示。它似乎包含了"默认"在导致此问题的size
字段的定义中,但我不知道它应该是什么。
我已经尝试了很多东西来调试这个,没有任何快乐,并且会对任何建议表示感谢。感谢。