@DEMonBond

Почему не перехватывается событие after_update Flask-sqlalchemy?

Пытаюсь использовать подписку на событие after_update, для того чтобы вызывать функцию при изменение значение поля в базе данных, при изменении модели ListenTask, что я не правильно делаю или не понимаю?

При добавлении новой записи вызывается нужная функция.

class ListenTask(db.Model):
    __table_args__ = {'schema': SCHEMA}
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(256), index=True, unique=True)
    desc = db.Column(db.String(256), nullable=False)
    status = db.Column(db.Boolean, default=False)
    folder = db.Column(db.String(256), nullable=False)
    id_email = db.Column(db.Integer, db.ForeignKey('{}.email_settings.id'.format(SCHEMA)))
    id_owner = db.Column(db.Integer, db.ForeignKey('{}.user.id'.format(SCHEMA)))
    id_spreadsheets = db.Column(db.Integer, db.ForeignKey('{}.spreadsheets.id'.format(SCHEMA)))

    def __repr__(self):
        return '<Listen {}>'.format(self.id)


@event.listens_for(ListenTask, 'after_insert')
def event_after_insert(mapper, connection, target):
    # Здесь будет очень важная бизнес логика
    print('event_after_insert: ', current_user)
    print('target: ', target.id)


@event.listens_for(ListenTask, 'after_update')
def event_after_update(mapper, connection, target):
    # Здесь будет очень важная бизнес логика
    print('receive_after_update : ', current_user)
    print('target: ', target.id)


@app.route('/update_task_status/<id>', methods=['GET', 'POST'])
@login_required
def update_task_status(id):
    task_status = ListenTask.query.get(id).status
    ListenTask.query.filter_by(id=id).update({'status': (not task_status)})
    db.session.commit()
    return redirect(url_for('room'))
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы