Как сохранить запись на альтернативную модель?
Мой проект находится в 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). Экземпляр класса создается и содержит необходимую информацию, так как я могу сохранить экземпляр в базе данных?
Я ссылаюсь на эти страницы без успеха:
- Flask-Admin: как изменить модель с помощью on_model_change?
- Сделайте поля первичного ключа редактируемыми в Flask-Admin (
peewee
конкретный) - Невозможно создать модели в Flask-admin (предлагает установить значения по умолчанию для переменных, передаваемых в метод init init, что я и сделал)
- Настройка (переопределение) метода отправки Flask-Admin из представления редактирования (ответ @makaron проницательный)
- Колба-администратор; Чтобы добавить собственную логику при вставке строки
- как использовать колбу-админ для редактирования модели
Любая помощь будет принята с благодарностью.
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)