将 table 创建任务添加到 Flask-Admin 模型创建

Add table creation task to Flask-Admin model creation

我仍在学习 flask-admin。作为部门模型的一部分,我有一个名为 table_name 的字段。当我创建一个新实例时,table_name 的值变成部门 table 中的一行。这就是 flask-admin 的设计目的。我想实际使用表单数据,即 table_name 的值来使用 sqlalchemy 创建一个 table。我知道如何使用 sqlalchemy 动态创建 table 。我只是想知道如何将它融入到 flask-admin 为我所做的事情中。示例:如果我在 flask 管理表单的 table_name 字段中键入 'my_table',将在我的模式中创建一个名为 'my_table' 的新 table。

例如,我定义了一个模型,fields/columns 之一是 'name'。当我在 flask-admin 中创建我的模型的新实例时,我为 'name' 输入的任何内容都会在我的 table 中保存为一行。我的问题是:如果我真的想创建一个全新的 table,其名称是提供给 'name' 属性的字符串怎么办?我知道我必须使用 sqlalchemy 来动态创建 table。但是我在 flask-admin 的什么地方添加了那个逻辑来创建 table.

flask-admin 中的什么方法或视图在 table 中插入行。也许我可以自定义或扩展该方法并添加我的代码以创建 tables 除了 flask-admin 所做的行插入之外。所以我想扩展 flask-admin 的功能来为我的需要做定制的事情。我已经阅读了 on_model_change 以及覆盖它以添加自定义逻辑的可能性。

您可以覆盖 ModelView 的 on_model_changeon_model_delete 方法,这些方法在 commit 更改之前由 flask-admin 调用:

class TableConfig(ModelView):
    def on_model_change(self, form, model, is_created):
        if is_created:
            sqlalchemy_create_table(model)

    def on_model_delete(self, model):
        sqlalchemy_drop)table(model)

其中 sqlalchemy_create_tablesqlalchemy_drop_table 是实际创建表的自定义方法,使用传递的 model 对象中的信息 - 在您的例子中,table_name 属性 或其他人。

我实际上在实时项目中使用 flask-admin 实现了这个确切的功能。