从编辑视图自定义(覆盖)Flask-Admin的Submit方法

时间:2014-01-15 14:28:00

标签: python flask flask-admin

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

  

employeeName - >薪水

模型看起来像这样:

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

我使用Flask-Admin来查看包含数据的表并进行编辑。 当我想更改'salary'字段时,我只需按下'edit'按钮,在Flask-Admin的默认编辑视图中我更改整数值。我按“提交”并成功应用数据库中的新值。

问题:
但我需要以这种方式覆盖Submit方法,因为它是功能,而添加一些自定义代码。就像我们假设我想在实际数据库提交后在日志文件中添加注释:

  

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

任何有关如何实现这一目标的建议都将受到高度赞赏。也许你可以指导我走的路,因为Flask-Admin文档到目前为止还没有给我足够的帮助。

2 个答案:

答案 0 :(得分:12)

答案 1 :(得分:3)

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

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

今天我发现这个解决方案实际上并不新鲜,而且是described on StackOverflow

但对于我的具体案例,我认为乔斯的答案更好。我更喜欢它,因为如果我覆盖on_model_change,如果我通过管理员网页编辑数据库,我只会调用我的自定义代码 ;对数据库的每个编程操作(如saveupdate)都可以使用本机代码 - 这正是我想要的。如果我覆盖save方法,我将自己处理每个 save 操作,无论是由管理区域发起还是由服务器引擎以编程方式发起。

解决了,谢谢!