生活分享

  • 首页
HETAO
业余码农、业余机械爱好者
  1. 首页
  2. 未分类
  3. 正文

flask wtform中枚举的使用

2019年9月9日 766点热度 0人点赞 0条评论

wtform可以非常友好的管理好表单的交互以及服务端验证。最近开始使用postgres,发现也能非常友好的支持enum类型,但是在实际的操作中发现了一个bug。这里我们使用form.populate_obj方法从form中更新字段到obj,使用form.process(obj)方法从obj更新到form。sqlalchemy使用枚举类型定义的字段,form中使用selectfiled或者其子类。

修改了好多回,反反复复跟踪后才明确这个问题,在第一次给form赋值时无错,第一次保存时也无错,bug出在form的存储数据上,就是对field.data的操作。原来在wtform中会判断field.data是否是filed.choices中的值,源代码如下:

file:core.py    
def pre_validate(self, form):
        for v, _ in self.choices:
            if self.data == v:
                break
        else:
            raise ValueError(self.gettext('Not a valid choice'))

self.data有时候是form中选中input的value值,有时候是枚举类型,要修复这个bug就要在所有枚举类型的基础类BaseEnum上改写eq和hash两个内置函数,使得双等“==”操作既能比较字符串,也能比较枚举类型,修改后修复。

Post Views: 880
标签: 暂无
最后更新:2019年9月9日

jinzhao

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2022 生活分享. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

浙ICP备14004285号-1