【问题标题】:Flask-admin; To add custom logic during row insertion烧瓶管理员;在行插入期间添加自定义逻辑
【发布时间】:2015-12-18 21:47:18
【问题描述】:

我是 flask-admin 库的新手,所以如果这是微不足道的,请原谅我。当我单击“保存”为模型创建新行时,我还想做一些自定义的事情。在我的例子中,我将动态创建一个表,其名称是在表单中输入的字符串。这将是 flask-admin 为我所做的补充,即在模型表中添加一个新行。那么我将把自定义逻辑放在哪里来做我想做的事呢?我在上面看到了这篇文章:Customize (override) Flask-Admin's Submit method from edit view 和乔关于覆盖 on_model_change 的回答,但我想要更多解释。从文档中,它说 on_model_change 是从 update_model 和 create_model 调用的。当我单击右侧的源链接时,我会到达:http://flask-admin.readthedocs.org/en/latest/_modules/flask_admin/model/base/#BaseModelView.create_model。它不显示代码。所以我不知道它是如何实现的。 有人可以用一个简单的示例代码说明我想要做什么吗?谢谢。

【问题讨论】:

    标签: flask sqlalchemy flask-admin


    【解决方案1】:

    这样做的正确方法(正如您所提到的)是通过after_model_change 函数。引用 Flask-Admin 源码

    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)
    

    【讨论】:

      猜你喜欢
      • 2015-09-17
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多