通过RPC调用从JavaScript更改后,Odoo字段不会更新

时间:2019-05-15 13:06:37

标签: javascript python odoo xml-rpc odoo-11

我希望能够以编程方式更改one2many字段(work_unit)的上下文,以修改其一个字段(product_id)的默认值。

理想情况下,我想直接从我的小部件中更改o2m上下文,但是这样做没有任何成功,该视图无法确认我对javascript所做的任何更改。

当前方法:我有另一个字段selected_chapter,我将上下文作为work_unit.product_id的默认值传递。效果很好:当我手动更改selected_chapter时,o2m上下文将为字段product_id选择新的默认值。

现在,我希望能够通过JavaScript中的小部件以编程方式修改selected_chapter

我通过从Widget调用_rpc()来调用python方法来做到这一点,并且它可以工作,但是在保存记录之前,视图不会更新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 :(得分:0)

首先,将import ( "k8s.io/apimachinery/pkg/labels" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) func ListPod(labelSelector metav1.LabelSelector) { labelMap := metav1.LabelSelectorAsMap(labelSelector) options := metav1.ListOptions{ LabelSelector: labels.SelectorFromSet(labelMap).String(), } podList, err := clientset.CoreV1().Pods("<namespace>").List(options) } 重命名为work_unit。 然后,在服务器端编写一个work_unit_ids方法。参见https://www.odoo.com/documentation/12.0/reference/orm.html#onchange-updating-ui-on-the-fly