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

问题描述 投票:0回答:1

我还在学习flask-admin。我有一个名为table_name的字段作为我的部门模型的一部分。当我创建一个新实例时,table_name的值将成为Department表中的一行。这就是flask-admin旨在做的事情。我想实际使用表单数据,即table_name的值来创建一个sqlalchemy表。我知道如何使用sqlalchemy动态创建表。我只是想知道如何将其纳入flask-admin为我做的事情。示例:如果我在烧瓶管理表单的table_name字段中键入“my_table”,则会在我的架构中创建一个名为“my_table”的新表。

例如,我定义了一个模型,其中一个字段/列是'name'。当我在flask-admin中创建我的模型的新实例时,无论我为'name'键入什么,都会在我的表中保存为一行。我的问题是:如果我真的想创建一个全新的表,其名称是提供给'name'属性的字符串怎么办?我知道我必须使用sqlalchemy动态创建该表。但是我在flask-admin中添加了那个逻辑来创建表。

flask-admin中的哪种方法或视图可以在表中插入行。也许我可以自定义或扩展该方法,并添加我的代码来创建表格以及flask-admin所做的行插入。所以我想扩展flask-admin的功能来为我的需求做自定义的东西。我已经读过on_model_change以及覆盖它以添加自定义逻辑的可能性。

python flask sqlalchemy flask-admin
1个回答
0
投票

您可以覆盖ModelView的on_model_changeon_model_delete方法,这些方法在commiting更改之前由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实现了这个确切的功能。

© www.soinside.com 2019 - 2024. All rights reserved.