Python 如何覆盖Flask Admin上的删除逻辑?

Python 如何覆盖Flask Admin上的删除逻辑?,python,flask-admin,Python,Flask Admin,我一直在谷歌和StackOverflow上搜索。基本上,我想尝试覆盖Flask Admin上的delete函数,以不实际删除记录,而是更新名为“deleted_by”和“deleted_on”的对象行 我发现了一些关于StackOverflow的问题,这些问题解释了如何使用on_model_change来更改save按钮上的逻辑,但是没有人具体说明delete model逻辑。我也没有在文档中找到任何与此相关的信息。有人能告诉我该如何处理这个问题吗 提前谢谢 覆盖视图中的方法。如果您使用的是Sq

我一直在谷歌和StackOverflow上搜索。基本上,我想尝试覆盖Flask Admin上的delete函数,以不实际删除记录,而是更新名为“deleted_by”和“deleted_on”的对象行

我发现了一些关于StackOverflow的问题,这些问题解释了如何使用on_model_change来更改save按钮上的逻辑,但是没有人具体说明delete model逻辑。我也没有在文档中找到任何与此相关的信息。有人能告诉我该如何处理这个问题吗

提前谢谢

覆盖视图中的方法。如果您使用的是Sqlalchemy视图,请注意在
try中调用
self.session.delete(model)
。。。除了

def delete_model(self, model):
    """
        Delete model.
        :param model:
            Model to delete
    """
    try:
        self.on_model_delete(model)
        self.session.flush()
        self.session.delete(model)
        self.session.commit()
    except Exception as ex:
        if not self.handle_view_exception(ex):
            flash(gettext('Failed to delete record. %(error)s', error=str(ex)), 'error')
            log.exception('Failed to delete record.')

        self.session.rollback()

        return False
    else:
        self.after_model_delete(model)

    return True
在您的视图中,您需要以下内容:

class MyModelView(ModelView):


   def delete_model(self, model):
        """
            Delete model.
            :param model:
                Model to delete
        """
        try:
            self.on_model_delete(model)
            # Add your custom logic here and don't forget to commit any changes e.g. 
            # self.session.commit()
        except Exception as ex:
            if not self.handle_view_exception(ex):
                flash(gettext('Failed to delete record. %(error)s', error=str(ex)), 'error')
                log.exception('Failed to delete record.')

            self.session.rollback()

            return False
        else:
            self.after_model_delete(model)

        return True
另外,您可能不想麻烦处理
self.on\u model\u delete(model)
self.after\u model\u delete(model)
调用,因为默认情况下它们什么都不做