刚开始 我的表单是这么写的
forms.py:
tags = Tag.query.all()
class MovieForm(FlaskForm):
"""电影表单"""
tag_id = SelectField(
label="标签",
validators=[DataRequired("请选择标签")],
description="标签",
coerce=int,
choices=[(v.id, v.name) for v in tags],
render_kw={"class": "form-control"}
)
在表单类之外 先执行 查询标签的 动作 tags = Tag.query.all(),但是我发现我在另外一个页面添加标签成功之后,返回在电影添加页面 进行tag选取时,下拉框中出现的内容并没有刚才新添加的tag,
怀疑是tags = Tag.query.all()这条语句并没有被调用
在网上搜索尝试后 解决方法如下:
class MovieForm(FlaskForm):
"""电影表单"""
tag_id = SelectField(
label="标签",
validators=[DataRequired("请选择标签")],
description="标签",
coerce=int,
render_kw={"class": "form-control"}
)
def __init__(self, *args, **kwargs):
super(MovieForm, self).__init__(*args, **kwargs)
self.tag_id.choices = [(v.id, v.name) for v in Tag.query.all()]
通过_init_()方法 初始化tag_id.choices,这样就可以实现下拉框与数据库同步了
还有另外一种直接下拉选择设定的值,然后将选择的值读取存储
代码如下:
class MovieForm(FlaskForm):
star = SelectField(
label="星级",
validators=[DataRequired("请选择星际")],
description="星级",
coerce=int,
choices=[(1, "1星"), (2, "2星"), (3, "3星"), (4, "4星"), (5, "5星")],
render_kw={"class": "form-control"})