2014-01-15 1 views
10

Предпосылок:
Я новичок в Python и Колба-администратор в частности. Я создал простую тестовую службу, которая имеет MondoDB, сохраняя данные с отношением «один к одному».Настройка (переопределение) Добавить метод Фляги-Admin от зрения редактирования

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 до сих пор не дает мне достаточной помощи.

ответ

9

Вы можете переопределить метод on_model_change, чтобы добавить свою собственную логику. Check http://flask-admin.readthedocs.org/en/latest/api/mod_model/#flask.ext.admin.model.BaseModelView.on_model_change

+0

Не успел ответить раньше. Большое спасибо, Джо. Также для вашей статьи * habr * на Flask-Admin это полезно :) – makaron

1

Я закончил переопределять метод save в моем классе, создаваемом документами. Так что теперь мой класс Сотрудник содержит такой код:

def save(self, *args, **kwargs): 
    print 'whatever I want to do myself is here' 
    return super(Employee, self).save(*args, **kwargs) 

Сегодня я обнаружил, что это решение не является на самом деле ничего нового и described on StackOverflow.

Но для моего конкретного случая я думаю, что ответ Джоса лучше. Мне нравится больше, потому что, если я переопределяю on_model_change, я вызываю свой код только, если я редактирую базу данных через веб-страницу администратора; и каждый программный работа над базой данных (например, save, update) будет работать с использованием собственного кода - именно этого я и хочу. Если я переопределяю метод save, я буду обрабатывать каждую операцию сохранения, независимо от того, была ли она инициирована административной областью или программно с помощью механизма сервера.

Решенный, спасибо!

+0

Спасибо за это дополнение. Это очень полезно для меня. –

+0

@AlisonS Рад, что это помогло. Пожалуйста, Элисон) – makaron