Моя задача: динамический индикатор выполнения в оду.
Я использую виджет Odoo: "progressbar". Я хочу обновлять представление каждый раз, когда значение обновляется, поэтому я хочу запустить функцию javascript on_change_input
внутри моего метода записи python, чтобы отобразить представление.
@api.one
def updatevalue(self, val):
self.value = val
# TODO call javascript function on_change_input()
Цель состоит в том, чтобы индикатор прогресса обновлялся во время выполнения процесса, и пользователь должен видеть прогресс без обновления сайта.
Возможно ли моя задача с помощью виджета progressbar? Или есть еще одна возможность показать динамический контент в Odoo?
Если я использую метод updatevalue
как кнопку, индикатор прогресса обновляется после нажатия кнопки без вызова функции javascript и без обновления страницы... но я хочу вызвать метод в своем коде (и, возможно, rpc), поэтому это не помогает -.-
Спасибо за ваше время!
Вот рабочий процесс, который у меня есть до сих пор:
Пользователь нажимает кнопку do_time_consuming_task
и вызывается следующая функция:
def do_timeconsuming_task(self):
ws = websocket.WebSocket()
ws.connect('ws:/129.0.0.1:1234/')
data = { 'topic' : 'server_command', 'id' : self.id, 'commandName' : 'do_sth',}
payload = ujson.dumps(data)
ws.send(payload)
ws.close()
На сервере команда принимается и обрабатывается. Существует открытое соединение rpc:
odoo = odoorpc.ODOO("129.0.0.1", port=8069)
odoo.login("database", "user", "password")
my_module = odoo.env['my_module.progress_widget_test']
progress_instance = my_module.browse(id)
Каждый раз, когда изменяется значение прогресса, я вызываю следующий метод моего модуля:
progress_instance.updatevalue(new_value)
когда значение равно 100%, я закрываю соединение
odoo.logout()