Пакетное редактирование в Flask-Admin

Я использую Flask-Admin и хочу иметь возможность обновлять сразу несколько полей из списка. Казалось, что я ищу пользовательское действие.

У меня получилось заставить его работать, но подозреваю, что не лучшим образом. Мне интересно, можно ли было бы сделать это более «фляжным» способом.

Что я делаю сейчас, например, если бы я обновлял все строки в таблице cars, чтобы иметь tires = 4:

  • Пользовательское действие в классе CarView собирает идентификаторы изменяемых строк, URL-адрес обратного вызова из request.referrer и имя таблицы cars и возвращает render_template(mass_update_info.html) с этими параметрами.
  • mass_update_info.html — это HTML-форма, в которой пользователь указывает 1) поле, которое он хотел бы изменить, и 2) значение, на которое его нужно изменить. При отправке форма делает POST для определенного представления (do_mass_update) с этими данными (все остальное передается как скрытые поля в этой форме).
  • do_mass_update использует отправленные ему данные для создания строки запроса SQL — полностью, "UPDATE {} SET {}='{}' WHERE id IN ({})".format(table, column, value, ids) — которая выполняется через db.engine.execute().
  • Пользователь перенаправляется на URL-адрес обратного вызова.

Меня беспокоит, что я, похоже, не использую SQLAlchemy, но (с точки зрения новичка) все это, похоже, основано на объектах модели, например. User.query(...), а у меня есть доступ только к имени модели/таблицы в виде строки. Могу ли я получить какой-то идентификатор от модели, передать его и выполнить поиск, чтобы получить его на другой стороне?


person Eli Rose    schedule 02.07.2015    source источник
comment
Это звучит правильно. Однако я бы использовал построитель динамических запросов вместо конкатенации строк. См. здесь: docs.sqlalchemy.org /ru/rel_1_0/форма/   -  person Joes    schedule 06.07.2015