zoukankan      html  css  js  c++  java
  • 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这样的优点吧:

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

  • 相关阅读:
    矩阵游戏|ZJOI2007|BZOJ1059|codevs1433|luoguP1129|二分图匹配|匈牙利算法|Elena
    BZOJ3262: 陌上花开
    BZOJ1176: [Balkan2007]Mokia
    BZOJ1261: [SCOI2006]zh_tree
    BZOJ2004: [Hnoi2010]Bus 公交线路
    BZOJ1066: [SCOI2007]蜥蜴
    BZOJ1294: [SCOI2009]围豆豆Bean
    BZOJ2756: [SCOI2012]奇怪的游戏
    BZOJ1857: [Scoi2010]传送带
    BZOJ1237: [SCOI2008]配对
  • 原文地址:https://www.cnblogs.com/pywjh/p/12882999.html
Copyright © 2011-2022 走看看