Flask admin, обновление столбца after_model_change не работает - PullRequest
0 голосов
/ 29 апреля 2020

Я успешно переопределил on_model_change в flask, но когда я пытаюсь сделать то же самое для 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}'

Что Я делаю, получаю текущие замечания и обновляю их в истории, но я могу получить данные столбца замечаний только после того, как они были обновлены в модели. Если это невозможно сделать во внесении изменений после обновления модели, могу ли я получите значение примечаний, которые вводит пользователь, чтобы я мог обновить его во время обновления модели.

1 Ответ

0 голосов
/ 30 апреля 2020

При чтении 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), является формой, используемой для создания / обновления модели - см. документы . например,

#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
...