I want to be able to change the context of a one2many field
(`work_unit`) programatically to modify the default value of one of its
fields (`product_id`).
Ideally I would like to change the o2m
context directly from my widget, but I haven't had any success doing
that, the view doesn't acknowledge any changes I make from javascript.
Current
approach: I have another field `selected_chapter` which I pass through
context as the default for `work_unit.product_id`. This works fine: when
I change `selected_chapter` manually, the o2m context picks up the new
default for the field `product_id`.
Now, I want to be able to modify `selected_chapter` programatically from a widget in javascript.
I
do this by calling a python method with an _rpc() call from my widget,
and it works, but the view doesn't update `selected_chapter` until I
save the record which defeats the purpose of the call.
Widget code:
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();
});
},
});
},
...
})
Model code:
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
View one2many field:
<field name="work_unit" mode="tree,kanban" filter_field="product_id" context="{'default_product_id': selected_chapter}">
Thanks in advance.
if not chapter.exists():
return
what is the exact use of these codes and exists() a function. possibly this returns True