Настройка (переопределение) метода отправки Flask-Admin из представления редактирования
Предпосылки:
Я новичок в Python и Flask-Admin в частности. Я создал простой тестовый сервис, который имеет MondoDB, сохраняя данные с отношением "один к одному".
employeeName -> зарплата
Модель выглядит так:
class Employee(db.Document):
fullName = db.StringField(max_length=160, unique=True)
salary = db.IntField()
И я использую Flask-Admin, чтобы наблюдать за таблицей с данными и редактировать ее. Когда я хочу изменить поле "зарплата", я просто нажимаю кнопку "Редактировать" и в представлении редактирования по умолчанию Flask-Admin меняю целочисленное значение. Я нажимаю "Отправить", и новое значение в базе данных успешно применяется.
Вопрос:
Но мне нужно переопределить метод Submit таким способом, который оставляет как функциональность и добавляет некоторый пользовательский код. Например, предположим, что я хочу добавить комментарий в файл журнала после фактической отправки в базу данных:
logging.warning ("Зарплата% s: была изменена на /%s", fullName, оклад)
Любое предложение о том, как этого добиться, будет высоко ценится. Возможно, вы могли бы направить меня в путь, так как документация Flask-Admin пока не дает мне достаточной помощи.
2 ответа
Вы можете переопределить on_model_change
способ добавить вашу собственную логику. Проверьте http://flask-admin.readthedocs.org/en/latest/api/mod_model/
Я закончил тем, что переопределил save
метод в моем классе, производном от документа. Итак, теперь мой класс Employee содержит такой код:
def save(self, *args, **kwargs):
print 'whatever I want to do myself is here'
return super(Employee, self).save(*args, **kwargs)
Сегодня я обнаружил, что это решение на самом деле не является чем-то новым и описано в Stackru.
Но для моего конкретного случая я думаю, что ответ Джо лучше. Мне нравится больше, потому что если я переопределить on_model_change
Я вызываю свой пользовательский код, только если я редактирую базу данных через веб-страницу администратора; и каждая программная операция над базой данных (например, save
, update
) будет работать с использованием нативного кода - это именно то, что я хочу. Если я переопределить save
метод, я буду обрабатывать каждую операцию сохранения самостоятельно, независимо от того, была ли она инициирована администратором или программно серверным движком.
Решено, спасибо!