Skip to Content
Menu
This question has been flagged

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.

Avatar
Discard

if not chapter.exists():

return

what is the exact use of these codes and exists() a function. possibly this returns True

Best Answer

Did yiou find a solution ? 

Avatar
Discard
Related Posts Replies Views Activity
1
Aug 23
10963
0
Jun 20
61
1
Sep 19
9689
3
Dec 23
44229
0
Mar 16
4513