如何覆盖 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)
调用,因为默认情况下它们什么都不做。
我一直在 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)
调用,因为默认情况下它们什么都不做。