2014-01-15 53 views
10

前提条件:
我是Python新手,特别是Flask-Admin。我创建了一个简单的测试服务,它有MondoDB,保持数据的关系为'一对一'。自定义(覆盖)Flask-Admin的编辑视图提交方法

employeeName - >工资

这个模型看起来像这样:

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

而且我用的烧瓶管理与数据,观察表,并对其进行编辑。 当我想更改“工资”字段时,我只需按下'编辑'按钮并在Flask-Admin的默认编辑视图中更改整数值。我按'提交',数据库中的新值成功应用。

问:
但我需要覆盖的方式,提交方法,离开,因为它是功能和增加一些自定义代码。就像假设我要添加日志文件的注释实际分贝后提交:

logging.warning(“%S的薪水:改为/%s”的,全名,薪水)

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

回答

1

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

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方法,我将自己处理每个保存操作,无论它是由Admin区域启动还是由服务器引擎以编程方式启动。

解决了,谢谢!

+0

感谢您的补充。这对我很有帮助。 –

+0

@AlisonS很高兴帮助。不客气,艾莉森) – makaron