odoo12 通过一个字段控制另一个Many2one字段的domain

Posted pywjh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了odoo12 通过一个字段控制另一个Many2one字段的domain相关的知识,希望对你有一定的参考价值。

odoo12 通过一个字段控制另一个Many2one字段的domain

 

场景:用户在选择产品类别的时候,二级联动到对应产品,就是设置一个搜索范围限制

 

对于先使用odoo10,再使用odoo12以后,对于同样的功能,差别真的是深有体会,先来说一下12的,毕竟来的都是求知的。

直接看代码:

@api.onchange(category_id)
    def onchange_category_id(self):
        for rec in self:
            if rec.category_id:
                rec.product_id = False # 更改类别时,清空产品
                return {
                    domain: {
                        product_id: [
                            (categ_id, =, rec.category_id.id),
                            (can_be_expensed, =, True)
                        ]
                    }
                }
            else: # 如果没选类别直接选产品,就啥都不现实
                return {
                    domain: {
                        product_id: [(id, =, False)]
                    }
                }

是不是看代码就懂了?直接return时,声明domain,对应一个当前模型的字段,设置范围就可以了。

 

再来看odoo10,(10已经没用了,所以就口头说一下吧,没有兴趣可以直接拜拜~)

如果我要通过产品类别去更改产品,我需要

1. 在xml视图上的产品字段上设置一个context,里面传入产品类别的id

2. 再跑到产品的模型下面,重写search_read

3. 判断一下如果是我要限制的产品context

4. 再取出context中存放的产品类别id,加入到args(就是domain)里面

5. 再return数据

是不是很麻烦,而且重写search_read方法我记得单独写还不生效,必须把name_search,search_read......很多个一起写出来才能生效

就酱~

说一下12这样的优点吧:

简单粗暴,不会造成代码的冗余,不用到处跳模型写代码,方便代码管理

 

以上是关于odoo12 通过一个字段控制另一个Many2one字段的domain的主要内容,如果未能解决你的问题,请参考以下文章

odoo12 通过python代码控制xml界面,更改字段属性(fields_view_get方法使用)

odoo12 修行基础篇之 添加明细字段

创建一个具有自动填充逗号或点到浮点字段功能的小部件(Odoo 13)

星辉信息科技Odoo开发教程6-配置安全权限控制02

如何继承第三方模块的控制器来定制Odoo 12?

Odoo 10 - 重载 Python 方法