设为首页 加入收藏

TOP

odoo 为可编辑列表视图字段搜索添加查询过滤条件(一)
2023-07-25 21:23:55 】 浏览:55
Tags:odoo 段搜索 加查询

实践环境

Odoo 14.0-20221212 (Community Edition)

需求描述

如下图,列表网仓记录详情页面(form视图),编辑内联视图中的货主记录,为货主仓库字段搜索,添加过滤条件,具体如下:

  • 添加、编辑货主时,下拉列表中只展示选取和当网仓记录所属公司关联的货主,点击搜索更多,仅展示和当前网仓记录所属公司关联的货主
  • 添加、编辑货主时,下拉列表中只展示选取和当网仓记录关联的仓库(到 “仓库” Tab页中添加的仓库),点击搜索更多,仅展示和当前网仓记录关联的仓库。

模型设计

说明:为了更好的体现本文主题,部分非关键代码已省略,即做了适当的模型简化处理

# 网仓
class OmsNetwork(models.Model):
    _name = 'oms.network'
    _description = 'OMS Network'

    company_id = fields.Many2one('res.company', '公司', index=True, tracking=3, readonly=True, default=lambda self: self.env.company)
    warehouse_ids = fields.Many2many('stock.warehouse', string="仓库")
    line_ids = fields.One2many('oms.network.line', 'network_id', string='货主')

# 货主
class OmsNetworkLine(models.Model):
    _name = 'oms.network.line'
    _description = 'OMS Network Line'

    network_id = fields.Many2one('oms.network', string='仓网', required=True)
    partner_id = fields.Many2one('res.partner', string='货主', required=True)
    warehouse_id = fields.Many2one('stock.warehouse', string="仓库", required=True)
    company_id = fields.Many2one('res.company', '公司', store=True, related='network_id.company_id')

   

class ResPartner(models.Model):
    _inherit = ['res.partner']
    _name = 'res.partner'

    #...略
    def _get_default_company_id(self):
        if self.env.context.get('set_default_company', False):
            return self.env.company
        return False
    
    company_id = fields.Many2one( # 注意,这个字段和OmsNetwork.company_id关联了相同模型,所以下文可用这个字段进行搜索过滤
        'res.company', 'Company', index=True,
        check_company=False, tracking=3,
        default=lambda self: self._get_default_company_id())
   
    
     
# 仓库
class StockWarehouse(models.Model):
    _inherit = 'stock.warehouse'

    # ...略
    # 注:没有类似ResPartner的company_id字段

视图设计

<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
    <data>
        <!--此处代码已省略-->
        <record id="view_oms_network_form" model="ir.ui.view">
            <field name="name">oms.network.form</field>
            <field name="model">oms.network</field>
            <field name="priority" eva l="0"/>
            <field name="arch" type="xml">
                <form string="OMS Network">
                    <!--此处代码已省略-->
                    <sheet>
                        <group>
                            <group>
                                <!--此处代码已省略-->
                            </group>
                            <group>
                                <field name="company_id"/>
                            </group>
                        </group>
                        <notebook>
                            <page string="货主" name="line_ids" >
                                <field name="line_ids">
                                    <tree editable="bottom">
                                        <field name="partner_id"/>
                                        <field name="partner_code"/>
                                        <field name="warehouse_id"/>
                                        <!--此处代码已省略-->
                                    </tree>
                                </field>
                            </page>
                            <!--此处代码已省略-->
                        </notebook>
                    </sheet>
                    <!--此处代码已省略-->
                </form>
            </field>
        </record>
        <!--此处代码已省略-->
    </data>
</odoo>

添加过滤条件代码实现

修改视图,给视图添加context

<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
    <data>
        <!--此处代码已省略-->
        <record id="view_oms_network_form" model="ir.ui.view">
            <field name="name">oms.network.
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇odoo 通过Javascript显示或隐藏fo.. 下一篇Python工具箱系列(十二)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目