12

前提条件:
我是 Python 新手,尤其是 Flask-Admin 新手。我创建了一个简单的测试服务,它有 MondoDB,以“一对一”的关系保持数据。

雇员姓名 -> 薪水

该模型如下所示:

class Employee(db.Document):
    fullName = db.StringField(max_length=160, unique=True)
    salary = db.IntField()

我使用 Flask-Admin 来观察包含数据的表格并对其进行编辑。当我想更改“薪水”字段时,只需按下“编辑”按钮,然后在 Flask-Admin 的默认编辑视图中更改整数值。我按“提交”并成功应用数据库中的新值。

问题:
但我需要重写 Submit 方法,保留它的功能并添加一些自定义代码。就像让我们假设我想在实际的数据库提交后在日志文件中添加评论:

logging.warning('%s 的薪水: 已更改为 /%s', fullName, Salary)

任何有关如何实现这一目标的建议将不胜感激。也许您可以指导我前进,因为到目前为止 Flask-Admin 文档并没有给我足够的帮助。

4

2 回答 2

14

您可以覆盖on_model_change方法来添加您的自定义逻辑。检查http://flask-admin.readthedocs.org/en/latest/api/mod_model/#flask.ext.admin.model.BaseModelView.on_model_change

于 2014-01-23T15:41:42.430 回答
3

我最终save在我的 Document 派生类中重写了一个方法。所以现在我的Employee类包含这种代码:

def save(self, *args, **kwargs):
    print 'whatever I want to do myself is here'
    return super(Employee, self).save(*args, **kwargs)

今天我发现这个解决方案实际上并不是什么新鲜事,并且在 StackOverflow 上有描述

但对于我的具体情况,我认为乔斯的回答更好。我更喜欢它,因为如果我覆盖我只有在我通过管理网页编辑数据库时才会on_model_change调用我的自定义代码;并且对数据库的每个编程操作(如, )都将使用本机代码工作——这正是我想要的。如果我重写方法,我将自己处理每个保存操作,无论是由管理区域启动还是由服务器引擎以编程方式启动。saveupdatesave

解决了,谢谢!

于 2014-02-15T13:40:14.420 回答