Поле Odoo не обновляется при изменении из JavaScript с помощью вызова RPC - PullRequest
0 голосов
/ 15 мая 2019

Я хочу иметь возможность программно изменять контекст поля one2many (work_unit), чтобы изменить значение по умолчанию для одного из его полей (product_id).

В идеале я хотел бы изменить контекст o2m непосредственно из моего виджета, но я не добился успеха в этом, представление не признает никаких изменений, которые я сделал из javascript.

Текущий подход: у меня есть другое поле selected_chapter, которое я передаю через контекст по умолчанию для work_unit.product_id. Это работает нормально: когда я изменяю selected_chapter вручную, контекст o2m выбирает новое значение по умолчанию для поля product_id.

Теперь я хочу иметь возможность программно изменять selected_chapter из виджета в javascript.

Я делаю это, вызывая метод python с помощью вызова _rpc () из моего виджета, и он работает, но представление не обновляется selected_chapter, пока я не сохраню запись, которая противоречит цели вызова.

Код виджета:

ListRenderer.include({
...
    _setSelectedChapter: function () {
        var self = this;

        this.trigger_up('mutexify', {
            action: function () {
                return self._rpc({
                    model: 'sale.order',
                    method: 'set_selected_chapter',

                    args: [
                        [self.res_id]
                    ],
                    kwargs: {
                        chapter_id: self.filter.getSelected()
                    },
                }).then(function (result) {
                    console.log("res", result);
                    self._render();
                });
            },
        });
    },
...
})

Код модели:

    selected_chapter = fields.Many2one('product.product')

    @api.multi
    def set_selected_chapter(self, chapter_id):
        chapter = self.env['product.product'].browse(chapter_id)

        if not chapter.exists():
            return

        # I've also tried using self.update(), same results
        self.selected_chapter = chapter

Посмотреть код:

<field name="work_unit" mode="tree,kanban" filter_field="product_id" context="{'default_product_id': selected_chapter}">

1 Ответ

0 голосов
/ 21 мая 2019

Сначала переименуйте work_unit в work_unit_ids. Затем на стороне сервера напишите метод onchange. Смотри https://www.odoo.com/documentation/12.0/reference/orm.html#onchange-updating-ui-on-the-fly

...