【问题标题】:Can I modify add form field, to have select list from data got by external API?我可以修改添加表单字段,以从外部 API 获取的数据中选择列表吗?
【发布时间】:2021-12-03 14:36:36
【问题描述】:

我想从添加表单中扩展一个字段,以便能够从外部 API 获得的选择列表中选择选项。让我解释一下这个问题。 我有这样的模型:

class ContactGroup(Model):
    id = Column(Integer, primary_key=True)
    name = Column(String(50), unique=True, nullable=False)
    my_field_id = Column(Integer, nullable=False)

    def __repr__(self):
        return self.name

当我想添加新实体时,默认情况下由 app-builder 创建的表单,我必须“手动”指定 my_field_id。所以我的问题是,我可以将 my_field_id 扩展到而不是指定整数吗?我将有一个选择列表,其中包含外部 API 返回的数据。 Api 以 json 格式提供数据,例如:

{
  data: [
    {
      id: 1,
      name: "My field"
    }
    ...
  ]
}

或者对于默认的应用程序构建器表单来说太复杂了,我必须完全重写添加表单?

谢谢!

【问题讨论】:

    标签: python flask flask-appbuilder


    【解决方案1】:

    我知道这是迟到的答案,但是,如果有人想做类似的事情,那么 SelectField 就是一个答案。您可以像这样在 init 方法中指定选择选项:

    class ContactGroup(Model):
        id = Column(Integer, primary_key=True)
        name = Column(String(50), unique=True, nullable=False)
        my_field_id = SelectField(
            "Legal entity",
            widget=Select2Widget(),
            description="Select a legal entity",
            validators=[validators.Optional()],
            coerce=int,
        )
    
        def my_field_id_query():
            # get data here...
        
        def __init__:
            super().__init__(*args, **kwargs)
            self.my_field_id.choices = [(choice["id"], choice["name"]) for choice in my_field_id_query()] 
    
    

    这里有更详细的解释:

    https://github.com/dpgaspar/Flask-AppBuilder/issues/1717

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多