能否修改App Builder新增表单字段,使其选择列表从外部API获取数据?
需求实现说明
不需要完全重写新增表单,仅扩展默认表单配置即可实现需求,操作逻辑如下:
实现步骤
- 自定义模型对应的表单视图,重写字段的控件类型,将原
my_field_id的数字输入框替换为下拉选择控件 - 给下拉控件绑定动态选项数据源,请求外部API拉取数据后,将返回结果中
data数组的id作为选项值、name作为选项展示文本即可
参考代码示例(以Flask App Builder为例)
首先导入依赖:
from flask_appbuilder.fieldwidgets import Select2Widget from wtforms import SelectField from flask_appbuilder.models.sqla.interface import SQLAInterface from flask_appbuilder import ModelView import requests
然后自定义表单视图,替换字段配置:
class ContactGroupAddView(ModelView): datamodel = SQLAInterface(ContactGroup) # 扩展表单字段配置 form_extra_fields = { "my_field_id": SelectField( label="关联字段", widget=Select2Widget(), # 动态拉取外部API作为选项 choices=lambda: [ (item["id"], item["name"]) for item in requests.get("你的外部API请求地址").json()["data"] ], coerce=int ) }
最后将自定义视图注册到App Builder即可生效。
注意事项
- 若外部API需要鉴权,可在
requests.get方法中添加headers参数携带认证信息 - 可给API请求结果加5-10分钟的短时间缓存,避免每次渲染表单都重复请求,优化加载性能
- 建议添加请求异常降级逻辑,API调用失败时返回默认空选项或提示用户加载失败,避免表单渲染报错
内容的提问来源于stack exchange,提问作者Filip Baszak
相关产品推荐
相关产品推荐

