Ответ 1
Вы можете переопределить метод on_model_change
, чтобы добавить свою собственную логику. Проверьте http://flask-admin.readthedocs.org/en/latest/api/mod_model/#flask.ext.admin.model.BaseModelView.on_model_change
Предпосылки:
Я новичок в 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, который уходит, поскольку это функциональность, и добавляет некоторый код. Например, допустим, что я хочу добавить комментарий в файл журнала после фактического db submit:
logging.warning( "Зарплата% s: была изменена на /% s", fullName, зарплата)
Любое предложение о том, как достичь этого, будет высоко оценено. Возможно, вы можете направить меня на путь, поскольку документация Flask-Admin до сих пор не дает мне достаточной помощи.
Вы можете переопределить метод on_model_change
, чтобы добавить свою собственную логику. Проверьте http://flask-admin.readthedocs.org/en/latest/api/mod_model/#flask.ext.admin.model.BaseModelView.on_model_change
Я закончил переопределять метод save
в моем производном от документа классе.
Итак, теперь мой класс Employee содержит такой код:
def save(self, *args, **kwargs):
print 'whatever I want to do myself is here'
return super(Employee, self).save(*args, **kwargs)
Сегодня я обнаружил, что это решение на самом деле ничего нового и fooobar.com/info/234978/....
Но для моего конкретного случая я думаю, что ответ Джоса лучше. Мне нравится больше, потому что, если я переопределяю on_model_change
, я вызываю свой собственный код только в том случае, если я редактирую базу данных через веб-страницу администратора; и каждая программная операция над базой данных (например, save
, update
) будет работать с использованием собственного кода - именно этого я и хочу. Если я переопределяю метод save
, я буду обрабатывать каждую операцию сохранения самостоятельно, независимо от того, был ли он инициирован административной областью или программным путем с помощью механизма сервера.
Решила, спасибо!