Odoo 中文社区

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Popular
    • Users
    • Groups

    Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

    由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

    本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

    开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

    如果您登录系统碰到问题,请在微信公众号留言:

    Solved odoo14, 搜索视图默认添加当前用户的部门查询条件

    Odoo 新手求助
    3
    8
    538
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      mzj last edited by

      当我点开一个菜单打开一个tree视图时, 我如何能够将当前的登录用户的部门添加到默认条件上呢, 我知道上下文当中可以通过uid添加当前登录用户的筛选, 但是登录用户的部门改如何做呢?24bcc695-f933-4061-95cf-2f4dd6025e10-image.png

      digitalsatori 1 Reply Last reply Reply Quote 0
      • digitalsatori
        digitalsatori 管理员 @mzj last edited by digitalsatori

        @mzj
        我估计你已经知道我们可以在act_window的context上设置默认的过滤条件的方法:

        <record id="xml_id" model="ir.actions.act_window">
             <field name="context">{'search_default_filter_name': 1}</field>
        </record>
        

        根据你需要按当前用户所属部门来过滤记录的要求,我们可以首先在对象的Search View中定义对应的搜索条件 (前提是你已安装了HR模块,或者已经继承res.users对象并在其上添加了department_id):

         <filter string="PR from my department" domain="[('department_id.member_ids.user_id', 'in', [uid])]" name="my_department_filter"/>
        

        注意我们给这个过滤条件设定的名字my_department_filter, 然后把这个过滤条件用到之前提到的window action的context里就是:

        <record id="xml_id" model="ir.actions.act_window">
             <field name="context">{'search_default_my_department_filter': 1}</field>
        </record>
        

        这是默认过滤条件的基本配置方法。使用过滤条件的好处是比较灵活,用户也可以选择关闭此过滤条件。如果需要获得强制性的过滤结果(即让用户无法关闭),在Odoo中可以有多个手段,比如action上的domain,设置“记录规则”或者覆写“search”方法等等

        【上海先安科技】(tony AT openerp.cn)

        M wjfonhand 2 Replies Last reply Reply Quote 0
        • digitalsatori
          digitalsatori 管理员 @mzj last edited by digitalsatori

          @mzj
          我估计你已经知道我们可以在act_window的context上设置默认的过滤条件的方法:

          <record id="xml_id" model="ir.actions.act_window">
               <field name="context">{'search_default_filter_name': 1}</field>
          </record>
          

          根据你需要按当前用户所属部门来过滤记录的要求,我们可以首先在对象的Search View中定义对应的搜索条件 (前提是你已安装了HR模块,或者已经继承res.users对象并在其上添加了department_id):

           <filter string="PR from my department" domain="[('department_id.member_ids.user_id', 'in', [uid])]" name="my_department_filter"/>
          

          注意我们给这个过滤条件设定的名字my_department_filter, 然后把这个过滤条件用到之前提到的window action的context里就是:

          <record id="xml_id" model="ir.actions.act_window">
               <field name="context">{'search_default_my_department_filter': 1}</field>
          </record>
          

          这是默认过滤条件的基本配置方法。使用过滤条件的好处是比较灵活,用户也可以选择关闭此过滤条件。如果需要获得强制性的过滤结果(即让用户无法关闭),在Odoo中可以有多个手段,比如action上的domain,设置“记录规则”或者覆写“search”方法等等

          【上海先安科技】(tony AT openerp.cn)

          M wjfonhand 2 Replies Last reply Reply Quote 0
          • M
            mzj @digitalsatori last edited by

            @digitalsatori 谢谢您提供的解决办法, 可是我在实现时遇到这样一个问题, hr模块里面有继承res.users 模型 也有关联department, 于是我就用hr模块里的department_id 去写 过滤条件:

            <filter string="我的部门" domain="[('department_id', '=',user.department_id)]" name="my_department_filter"/>
            

            出现这样的错误:

            Invalid composed field user.department_id in domain of <filter name="my_department">  ([('requested_by_department','=', user.department_id)])
            

            hr 模块里面有关字段是这样的

            employee_ids = fields.One2many('hr.employee', 'user_id', string='Related employee')
            employee_id = fields.Many2one('hr.employee', string="Company employee",
                    compute='_compute_company_employee', search='_search_company_employee', store=False)
            department_id = fields.Many2one(related='employee_id.department_id', readonly=False, related_sudo=False)
            

            我想问一下, 搜索视图里面 user 不可以使用没有在数据库当中保存的属性(字段)吗

            digitalsatori 1 Reply Last reply Reply Quote 0
            • digitalsatori
              digitalsatori 管理员 @mzj last edited by

              @mzj
              之前的domain设计有问题,我在原来的帖子里改了一下,你再试试。

              【上海先安科技】(tony AT openerp.cn)

              M 1 Reply Last reply Reply Quote 0
              • M
                mzj @digitalsatori last edited by

                @digitalsatori 已经试过了, 这种方式是可行的! 非常感谢您的帮助!!!

                digitalsatori 1 Reply Last reply Reply Quote 0
                • digitalsatori
                  digitalsatori 管理员 @mzj last edited by

                  @mzj 不客气

                  【上海先安科技】(tony AT openerp.cn)

                  1 Reply Last reply Reply Quote 0
                  • wjfonhand
                    wjfonhand @digitalsatori last edited by

                    one2many后面还可以直接引用many2one字段,竟然还能执行出结果,真是神奇的魔法。到底表达式左边返回的是列表还是单值呢?

                    如果左边是单值

                    in是双向的,uid是不是不用转为列表?

                    GoodERP -- Odoo China fork

                    digitalsatori 1 Reply Last reply Reply Quote 0
                    • digitalsatori
                      digitalsatori 管理员 @wjfonhand last edited by

                      @wjfonhand 你说的对: “in 是双向的”。 左边返回的是列表,右边的uid不转为列表也可以的。

                      【上海先安科技】(tony AT openerp.cn)

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post