Flask管理,更新一列after_model_change不工作。

问题描述 投票:0回答:1

我已经成功覆盖了 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个回答
0
投票

阅读 after_model_change 文件 你可以看到模型已经被提交了。如果你想用这种方法改变模型,你需要将改变提交到数据库中。 例如:你问:"我能否得到用户输入的备注值,以便在模型更新时更新它"。

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) 是用于创建update模型的表单--请参见 文件例如:

#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
© www.soinside.com 2019 - 2024. All rights reserved.