Как сохранить запись на альтернативную модель?

Мой проект находится в flask-admin с использованием flask-sqlalchemy в качестве ORM.

Вот мой модельный класс:

class history_records(db.Model):
  id = db.Column(db.Integer,primary_key=True)
  table = db.Column(db.String(80))
  field_name = db.Column(db.String(80))
  old_value = db.Column(db.String(80))
  new_value = db.Column(db.Text)
  updated_datetime = db.Column(db.DateTime,default=datetime.utcnow())
  updated_by = db.Column(db.String(80),db.ForeignKey('users.username'))

  def __init__(self,table="",field_name="",updated_datetime=""):
    self.name = table + ' - ' + field_name + ' - ' + updated_datetime

  def __repr__(self):
    return self.name

Затем:

class my_view(ModelView):
  #... form configs ...

  def on_model_change(self,form,model,is_created=False):
    #...do some stuff...
    history = history_records() # .get_create_form()

    history.table = model_name
    history.field_name = field_name
    history.old_value = old_value
    history.new_value = new_value

Все мои другие взгляды наследуются от my_view и я специально пытаюсь написать это, чтобы у меня не было обычая on_model_change в каждом представлении, используя имена полей для этого представления.

Часть, которую я пропускаю, - как получить мое приложение, чтобы сохранить history_records записать, что on_model_change метод создает в базе данных (postgres). Экземпляр класса создается и содержит необходимую информацию, так как я могу сохранить экземпляр в базе данных?

Я ссылаюсь на эти страницы без успеха:

Любая помощь будет принята с благодарностью.

1 ответ

Решение

Чтобы сохранить экземпляр истории, вам нужно добавить его в сеанс представления, например

def on_model_change(self,form,model,is_created=False):
    #...do some stuff...
    history = history_records() # .get_create_form()

    history.table = model_name
    history.field_name = field_name
    history.old_value = old_value
    history.new_value = new_value
    self.session.add(history)
Другие вопросы по тегам