Flask 烧瓶管理员;在行插入期间添加自定义逻辑的步骤

Flask 烧瓶管理员;在行插入期间添加自定义逻辑的步骤,flask,sqlalchemy,flask-admin,Flask,Sqlalchemy,Flask Admin,我是flask管理员库的新手,所以如果这是一件小事,请原谅我。当我单击“保存”为模型创建新行时,我还想做一些自定义操作。在本例中,我将动态创建一个表,其名称是表单中输入的字符串。这将是flask admin为我所做的额外工作,即向模型表添加新行。那么,我将把定制逻辑放在哪里去做我想做的事情呢?我在so上看到了这篇文章:Joe关于覆盖模型变更的回答,但我想得到更多的解释。从文档中可以看出,on_model_change是从update_model和create_model调用的。当我点击右边的源链

我是flask管理员库的新手,所以如果这是一件小事,请原谅我。当我单击“保存”为模型创建新行时,我还想做一些自定义操作。在本例中,我将动态创建一个表,其名称是表单中输入的字符串。这将是flask admin为我所做的额外工作,即向模型表添加新行。那么,我将把定制逻辑放在哪里去做我想做的事情呢?我在so上看到了这篇文章:Joe关于覆盖模型变更的回答,但我想得到更多的解释。从文档中可以看出,on_model_change是从update_model和create_model调用的。当我点击右边的源链接时,我得到:。它不显示代码。所以我不知道它是如何实现的。
有人能用一个简单的示例代码来说明我想说的吗?谢谢。

正确的方法(正如您所提到的)是通过
更改后的
功能。引用Flask管理源代码

def after_model_change(self, form, model, is_created):
    """
        Perform some actions after a model was created or updated and
        committed to the database.

        Called from create_model after successful database commit.

        By default does nothing.

        :param form:
            Form used to create/update model
        :param model:
            Model that was created/updated
        :param is_created:
            True if model was created, False if model was updated
    """
    pass
因此,基本上,在您的例子中,您需要在模型的这个函数中执行表创建。即

class MyModelView(BaseModelView):
     column_list = ('fieldX', 'fieldY')

     def after_model_change(self, form, model, is_created):
         tablename = form.tablename
         if is_created: # create the table just once
             perform_dynamic_table_creation(conn,tablename)

正确的方法(如您所述)是通过
after\u model\u change
功能。引用Flask管理源代码

def after_model_change(self, form, model, is_created):
    """
        Perform some actions after a model was created or updated and
        committed to the database.

        Called from create_model after successful database commit.

        By default does nothing.

        :param form:
            Form used to create/update model
        :param model:
            Model that was created/updated
        :param is_created:
            True if model was created, False if model was updated
    """
    pass
因此,基本上,在您的例子中,您需要在模型的这个函数中执行表创建。即

class MyModelView(BaseModelView):
     column_list = ('fieldX', 'fieldY')

     def after_model_change(self, form, model, is_created):
         tablename = form.tablename
         if is_created: # create the table just once
             perform_dynamic_table_creation(conn,tablename)