我已经成功覆盖了 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}'
我正在做的是获取当前的备注并将其更新到历史,但我可以获取备注列数据后,只有它已被更新到模型如果它不可能做到这一点,在模型已被更新后进行更改,我可以获取用户正在输入的备注值,以便我可以在模型更新时更新它。
阅读 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