Flask下拉列表与数据库同步问题解决记录

刚开始 我的表单是这么写的

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"})
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值