Я использую 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(...)
, а у меня есть доступ только к имени модели/таблицы в виде строки. Могу ли я получить какой-то идентификатор от модели, передать его и выполнить поиск, чтобы получить его на другой стороне?