【问题标题】:Flask-AppBuilder how to set primary key on create?Flask-AppBuilder 如何在创建时设置主键?
【发布时间】:2020-12-21 16:02:18
【问题描述】:

我的用户应该能够为我的表创建新行,但是当我在 Flask-AppBuilder 中使用加号按钮时,主键不显示,并且生成的 SQL INSERT 语句缺少主键,这显然失败了.

如何让 Flask-AppBuilder 显示新行的主键?

示例

models.py

class Catalogue(Model):                                                                                                                                                                                                                                                                                                       
    id = Column(String(200), primary_key=True)
    label =  Column(String(200), nullable=False)
    type =  Column(Enum("UserGroup","ApplicationSystem","Feature","EnterpriseFunction","OrganizationalUnit"), nullable=False)

views.py

class CatalogueView(ModelView):
    datamodel = SQLAInterface(Catalogue)
    label_columns = {'label':'Name', }
    list_columns = ['id', 'label', 'type']
    related_views = [ClassifiedView]

现在,当我运行应用程序时,我可以在视图http://127.0.0.1:5000/catalogueview/list/ 中看到“id”字段。

但是,当我在http://127.0.0.1:5000/catalogueview/show/myexamplecatalogue 进入详细视图时,主键字段“id”被隐藏,使用http://127.0.0.1:5000/catalogueview/add 创建新条目时也会发生同样的情况,然后如上所述失败。

如何阻止 Flask-AppBuilder 隐藏我的主键并成功创建新条目?

【问题讨论】:

  • 也许可以尝试使用add_columns 覆盖添加表单中显示的内容:flask-appbuilder.readthedocs.io/en/latest/…
  • @IljaEverilä:但是为什么一开始就缺少像主键这样重要的东西呢?没有它就不可能创建条目。
  • 大多数时候人们使用自动生成的代理键,所以生成代理键完全取决于数据库,让人们手动定义它甚至可能有害。
  • Übrigens habe ich keine Erfahrung mit Flask-Appbuilder.
  • @IljaEverilä 感谢您的解释,我习惯了语义网,其中主键是手动定义的 URI,我将研究 add_columns 方法。

标签: python sqlalchemy flask-appbuilder


【解决方案1】:

正如@IljaEverilä 所建议的,这可以使用“edit_columns”属性添加:

class CatalogueView(ModelView):
  datamodel = SQLAInterface(Catalogue)
  label_columns = {'label':'Name', }
  list_columns = ['id', 'label', 'type']
  related_views = [ClassifiedView]
  edit_columns = ['id', 'label', 'type']

【讨论】:

    猜你喜欢
    • 2019-01-21
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2018-04-29
    • 2019-05-17
    • 2019-08-06
    • 2010-11-04
    • 1970-01-01
    相关资源
    最近更新 更多