前提条件:
我是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文档到目前为止还没有给我足够的帮助。
答案 0 :(得分:12)
您可以覆盖on_model_change
方法来添加自定义逻辑。查看http://flask-admin.readthedocs.org/en/latest/api/mod_model/#flask.ext.admin.model.BaseModelView.on_model_change
答案 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
,如果我通过管理员网页编辑数据库,我只会调用我的自定义代码 ;对数据库的每个编程操作(如save
,update
)都可以使用本机代码 - 这正是我想要的。如果我覆盖save
方法,我将自己处理每个 save 操作,无论是由管理区域发起还是由服务器引擎以编程方式发起。
解决了,谢谢!