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這樣的優點吧:

簡單粗暴,不會造成代碼的冗余,不用到處跳模型寫代碼,方便代碼管理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM