Колба-администратор; Чтобы добавить собственную логику при вставке строки
Я новичок в библиотеке фляги-администратора, поэтому, пожалуйста, прости меня, если это тривиально. Когда я нажимаю "Сохранить", чтобы создать новую строку для модели, я также хочу сделать несколько пользовательских вещей. В моем случае я создам таблицу динамически, именем которой является строка, введенная в форму. Это будет в дополнение к тому, что мне делает колба-админ, т.е. добавляет новую строку в таблицу моделей. Так, где я буду помещать пользовательскую логику, чтобы делать то, что я хочу сделать? Я видел этот пост так: " Настроить (переопределить)" метод "Отправить" Flask-Admin из представления редактирования с ответом Джо о переопределении on_model_change, но мне понадобятся некоторые дополнительные пояснения. В документации говорится, что on_model_change вызывается из update_model и create_model. Когда я нажимаю ссылку на источник справа, я попадаю на: http://flask-admin.readthedocs.org/en/latest/_modules/flask_admin/model/base/. Это не показывает код. Так что я не знаю, как это реализовано. Может кто-нибудь, пожалуйста, проиллюстрируйте то, что я пытаюсь сделать, в простом примере кода? Благодарю.
1 ответ
Правильный способ сделать это (как вы уже упоминали) через after_model_change
функция. Цитирование исходного кода Flask-Admin
def after_model_change(self, form, model, is_created):
"""
Perform some actions after a model was created or updated and
committed to the database.
Called from create_model after successful database commit.
By default does nothing.
:param form:
Form used to create/update model
:param model:
Model that was created/updated
:param is_created:
True if model was created, False if model was updated
"""
pass
Таким образом, в основном, в вашем случае, вам нужно выполнить создание таблицы внутри этой функции в вашей модели. а именно
class MyModelView(BaseModelView):
column_list = ('fieldX', 'fieldY')
def after_model_change(self, form, model, is_created):
tablename = form.tablename
if is_created: # create the table just once
perform_dynamic_table_creation(conn,tablename)