Я хочу иметь возможность программно изменять контекст поля 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}">