【问题标题】:Flask admin , update a column after_model_change not working烧瓶管理员,更新列 after_model_change 不起作用
【发布时间】:2020-04-29 09:09:48
【问题描述】:

我已经成功地覆盖了烧瓶中的on_model_change,但是当我尝试对after_model_change 做同样的事情时,它什么也没做,如何在模型更改后对模型进行更改?

Class CustomAdminView(ModelView):  # pylint: disable=no-init

    #works fine and udpates the column
    def on_model_change(self, form, model, is_created):
        curr_user = getpass.getuser()
        model.updatedby = curr_user

    #does nothing to the model
    def after_model_change(self, form, model, is_created):
        current_remarks= model.remarks
        model.rhistory = f'changes made : {current_remarks}'

我正在做的是获取当前备注并将其更新到历史记录,但是我只能在将备注列数据更新到模型后才能获取 如果在模型更新后无法进行更改,我可以获取用户输入的备注的值,以便在模型更新期间进行更新。

【问题讨论】:

    标签: python flask flask-admin


    【解决方案1】:

    阅读after_model_changedocs可以看到模型已经被提交了。如果要在此方法中更改模型,则需要将更改提交到数据库。例如

    def after_model_change(self, form, model, is_created):
        current_remarks= model.remarks
        model.rhistory = f'changes made : {current_remarks}'
        try:
            db.session.commit():
        except Exception as ex:
            db.session.rollback()
            #  handle error
    

    您问,“我可以获取用户输入的备注的值,以便我可以在模型更新期间对其进行更新”。当然可以,前提是创建/编辑表单中存在备注字段。例如on_model_change(form, model, is_created) 中传递的表单是用于创建/更新模型的表单 - 请参阅 docs。例如

    #works fine and udpates the column
    def on_model_change(self, form, model, is_created):
        curr_user = getpass.getuser()
        model.updatedby = curr_user
    
        # assume form has a field called remarks
        model.remarks = form.remarks.data
    

    【讨论】:

    • Error @ db.session.commit() ,我可以使用代码的第二个 sn-p 但是,第一个不能提交更改,我正在传递“session = db.session”,但 session.commit() 和 db.session.commit() 都不起作用
    猜你喜欢
    • 2018-04-15
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 2015-09-17
    • 1970-01-01
    相关资源
    最近更新 更多