Odoo 中文社区

    • 注册
    • 登录
    • 搜索
    • 版块
    • 标签
    • 热门
    • 用户
    • 群组

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

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

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

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

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

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

    Odoo 新手求助
    3
    8
    728
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • M
      mzj 最后由 编辑

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

      digitalsatori 1 条回复 最后回复 回复 引用 0
      • digitalsatori
        digitalsatori 管理员 @mzj 最后由 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 条回复 最后回复 回复 引用 0
        • digitalsatori
          digitalsatori 管理员 @mzj 最后由 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 条回复 最后回复 回复 引用 0
          • M
            mzj @digitalsatori 最后由 编辑

            @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 条回复 最后回复 回复 引用 0
            • digitalsatori
              digitalsatori 管理员 @mzj 最后由 编辑

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

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

              M 1 条回复 最后回复 回复 引用 0
              • M
                mzj @digitalsatori 最后由 编辑

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

                digitalsatori 1 条回复 最后回复 回复 引用 0
                • digitalsatori
                  digitalsatori 管理员 @mzj 最后由 编辑

                  @mzj 不客气

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

                  1 条回复 最后回复 回复 引用 0
                  • wjfonhand
                    wjfonhand @digitalsatori 最后由 编辑

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

                    如果左边是单值

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

                    GoodERP -- Odoo China fork

                    digitalsatori 1 条回复 最后回复 回复 引用 0
                    • digitalsatori
                      digitalsatori 管理员 @wjfonhand 最后由 编辑

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

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

                      1 条回复 最后回复 回复 引用 0
                      • First post
                        Last post