Колба-администратор; Чтобы добавить собственную логику при вставке строки

Я новичок в библиотеке фляги-администратора, поэтому, пожалуйста, прости меня, если это тривиально. Когда я нажимаю "Сохранить", чтобы создать новую строку для модели, я также хочу сделать несколько пользовательских вещей. В моем случае я создам таблицу динамически, именем которой является строка, введенная в форму. Это будет в дополнение к тому, что мне делает колба-админ, т.е. добавляет новую строку в таблицу моделей. Так, где я буду помещать пользовательскую логику, чтобы делать то, что я хочу сделать? Я видел этот пост так: " Настроить (переопределить)" метод "Отправить" 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)
Другие вопросы по тегам