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