![](/img/trans.png)
[英]With Flask-Admin and Flask how can I submit a form\view based on ModelView from code?
[英]Customize (override) Flask-Admin's Submit method from edit view
前提条件:
我是Python的新手,特别是Flask-Admin。 我创建了一个简单的测试服务,它有MondoDB,保持数据的“一对一”关系。
employeeName - >薪水
该模型看起来像这样:
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文档到目前为止还没有给我足够的帮助。
您可以覆盖on_model_change
方法以添加自定义逻辑。 检查http://flask-admin.readthedocs.org/en/latest/api/mod_model/#flask.ext.admin.model.BaseModelView.on_model_change
我最终在我的Document派生类中覆盖了一个save
方法。 所以现在我的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
我只有在通过管理员网页编辑数据库时才会调用我的自定义代码; 数据库上的每个编程操作(如save
, update
)都可以使用本机代码 - 这正是我想要的。 如果我重写save
方法,我将自己处理每个保存操作,无论是由管理区域启动还是由服务器引擎以编程方式启动。
解决了,谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.