跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. 如何在domain中获得登录用户的信息来进行过滤 及 fnct_search怎么写?

如何在domain中获得登录用户的信息来进行过滤 及 fnct_search怎么写?

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
4 帖子 2 发布者 3.7k 浏览 1 关注中
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • S 离线
    S 离线
    shihongzhi
    发表于 最后由 编辑
    #1

    我的需求:  我想获得登录用户的信息,用这个信息在domain中过滤tree显示数据
    res.users类:

    class ccc_users(osv.osv):<br />	_name = &quot;res.users&quot;<br />	_description = &quot;自己的用户表&quot;<br />	_inherit = &quot;res.users&quot;<br />	_columns = { <br />		&#039;region_id&#039;: fields.many2one(&#039;ccc.region&#039;, &#039;区域&#039;),&nbsp; &nbsp;  #指示该用户是哪个区域的<br />		&#039;parent_id&#039;: fields.many2one(&#039;res.users&#039;, &#039;区域负责人&#039;),<br />		&#039;child_ids&#039;: fields.one2many(&#039;res.users&#039;, &#039;parent_id&#039;, &#039;本区域业务员&#039;),<br />	}<br />	_sql_constraints = [<br />		(&#039;uniq_name&#039;, &#039;unique(name)&#039;, u&#039;用户姓名必须唯一,已经存在这个用户姓名的用户了&#039;)<br />	]
    



    客户表:

    class ccc_partner(osv.osv):<br />	_name = &quot;ccc.partner&quot;<br />	_description = &quot;ccc客户表&quot;<br /><br />	def _is_this_region_read(self, cr, uid, ids, name, arg, context=None):<br />		res = {}<br />		for id in ids:<br />			result = self.read(cr, uid, id, &#91;&#039;region_id&#039;])<br />			login_region = self.pool.get(&#039;res.users&#039;).browse(cr, uid, uid).region_id<br />			print result<br />			print login_region<br />			print result&#91;&#039;region_id&#039;][0]<br />			print login_region&#91;&#039;id&#039;]<br />			if result&#91;&#039;region_id&#039;][0] == login_region&#91;&#039;id&#039;]:<br />				res[id] = True<br />				# res[id] = False<br />			else:<br />				res[id] = False<br /><br />		return res<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; _columns = {<br />		&#039;name&#039; : fields.char(&quot;客户名称&quot;, size=64, required=True),<br />		&#039;user_id&#039; : fields.many2one(&#039;res.users&#039;, &quot;责任人&quot;),<br />		&#039;is_this_region&#039;: fields.function(_is_this_region_read, string=&#039;是否与登录用户同区域&#039;, type=&quot;boolean&quot;, store=True, readonly=True),<br />	}
    



    domain代码:

    &lt;field name=&quot;domain&quot;&gt;[(&#039;is_this_region&#039;, &#039;=&#039;, True)]&lt;/field&gt;
    



    我用这个方法去写了一下(即用function字段来作为domain过滤),但是还是有问题。domain的过滤先与 is_this_region的求解,所以每个数据的is_this_region都是False,所以根本没有起到过滤的效果。经群里的大虾提示说 ,可以用 fnct_search, 因为domain过滤就是通过search()来实现的。 但是fnct_search我根本不知道怎么写?  也没有看到比较容易看懂得例子。所以在此发帖问一下是不是用fnct_search就能实现完成这个需求,并且fnct_search应该怎么写?  谢谢! 

    1 条回复 最后回复
    0
    • M 离线
      M 离线
      mrshelly
      发表于 最后由 编辑
      #2

      在 search 方法中. 获取 uid 能管辖的 region id 并组合一个

      [('region_id', 'in', 查到的ids)] 的 domain 添加到现有 domain 中即可...

      1 条回复 最后回复
      0
      • S 离线
        S 离线
        shihongzhi
        发表于 最后由 编辑
        #3

        [quote author=mrshelly link=topic=4281.msg11668#msg11668 date=1343871623]
        在 search 方法中. 获取 uid 能管辖的 region id 并组合一个

        [('region_id', 'in', 查到的ids)] 的 domain 添加到现有 domain 中即可...
        [/quote]

        谢谢,问题已经解决了 😎

        1 条回复 最后回复
        0

        你好!看起来您对这段对话很感兴趣,但您还没有一个账号。

        厌倦了每次访问都刷到同样的帖子?您注册账号后,您每次返回时都能精准定位到您上次浏览的位置,并可选择接收新回复通知(通过邮件或推送通知)。您还能收藏书签、为帖子顶,向社区成员表达您的欣赏。

        有了你的建议,这篇帖子会更精彩哦 💗

        注册 登录
        回复
        • 在新帖中回复
        登录后回复
        • 从旧到新
        • 从新到旧
        • 最多赞同


        • 登录

        • 没有帐号? 注册

        • 登录或注册以进行搜索。
        • 第一个帖子
          最后一个帖子
        0
        • 版块
        • 标签
        • 热门
        • 用户
        • 群组