Как обновить представление после данных, полученных в Odoo 11/12 - PullRequest
0 голосов
/ 12 марта 2019

Есть ли лучший способ сделать это?

На мой взгляд, я добавил это к записи view.xml:

<field name="arch" type="xml">
  <tree string="Test View" js_class="test_view">
    <field name="testField" />
  </tree>
</field>

У меня есть файл шаблона template.xml, на который я ссылался * manifest.py

<xpath>
  <script type="text/javascript" src="/<mymodule>/static/src/js/<mymodule>.js"> 
  </script>
</xpath>

Добавил эту функцию в мою модель:

@api.model
def generate_data(self):
  # do stuff on database
  pass

У меня в контроллере модуля есть это:

class Reports(http.Controller):
    @http.route('/test/refresh', type='json', auth="user")
    def refresh(self):
        return request.env['model.name'].generate_data()

Затем я расширил базовый ListView в вышеупомянутом .js:

odoo.define('<mymodule>.updateview, function (require) {

  var view_registery = require('web.view_registry');
  var ListController = require('web.ListController');
  var ListView = require('web.ListView');

  var TestListController = ListController.extend({
    init: function () {
      this._super.apply(this, arguments);
            var self = this;
            this._rpc({
                route: '/test/refresh'
            }).then(function() {
                self.reload();
            });

    }
  });


  var ReportListView = ListView.extend({
      config: _.extend({}, ListView.prototype.config, {
          Controller: TestListController 
       }),
   });
  view_registery.add('test_view')
});

Все хорошо работает при загрузке страницы. Есть ли лучший способ, который рекомендует Odoo? Или, может быть, это может помочь кому-то еще.

1 Ответ

0 голосов
/ 15 марта 2019

Я думаю, что вы могли бы использовать клиентское действие odoo для перезагрузки представления как возврата вашей функции python:

@api.model
def generate_data(self):
  # do stuff on database
  (...)
  return {
    'type': 'ir.actions.client',
    'tag': 'reload',
  }
...