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

How to override delete logic on Flask Admin?

我一直在 Google 和 Whosebug 上搜索这方面的内容。基本上,我想尝试覆盖 Flask-Admin 上的删除功能,而不是实际删除记录,而是更新名为 'deleted_by' 和 'deleted_on'.

的对象的一行

我在 Whosebug 上发现了几个问题,这些问题解释了如何使用 on_model_change 更改保存按钮上的逻辑,但没有一个具体说明删除模型逻辑。我也没有在文档中找到与此相关的任何信息。谁能告诉我应该如何处理这个问题?

提前致谢!

覆盖方法 delete_model in your view. Here is the default behaviour 如果您使用的是 SQLalchemy 视图,请注意 try ... except 块中对 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_model_delete(model)self.after_model_delete(model) 调用,因为默认情况下它们什么都不做。