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

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

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

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

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



  • 我的需求:  我想获得登录用户的信息,用这个信息在domain中过滤tree显示数据<br />res.users类:<br />[code]class ccc_users(osv.osv):<br /> _name = "res.users"<br /> _description = "自己的用户表"<br /> _inherit = "res.users"<br /> _columns = { <br /> 'region_id': fields.many2one('ccc.region', '区域'),    #指示该用户是哪个区域的<br /> 'parent_id': fields.many2one('res.users', '区域负责人'),<br /> 'child_ids': fields.one2many('res.users', 'parent_id', '本区域业务员'),<br /> }<br /> _sql_constraints = [<br /> ('uniq_name', 'unique(name)', u'用户姓名必须唯一,已经存在这个用户姓名的用户了')<br /> ][/code]<br /><br />客户表: [code]class ccc_partner(osv.osv):<br /> _name = "ccc.partner"<br /> _description = "ccc客户表"<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, ['region_id'])<br /> login_region = self.pool.get('res.users').browse(cr, uid, uid).region_id<br /> print result<br /> print login_region<br /> print result['region_id'][0]<br /> print login_region['id']<br /> if result['region_id'][0] == login_region['id']:<br /> res[id] = True<br /> # res[id] = False<br /> else:<br /> res[id] = False<br /><br /> return res<br /><br />        _columns = {<br /> 'name' : fields.char("客户名称", size=64, required=True),<br /> 'user_id' : fields.many2one('res.users', "责任人"),<br /> 'is_this_region': fields.function(_is_this_region_read, string='是否与登录用户同区域', type="boolean", store=True, readonly=True),<br /> }[/code]<br /><br />domain代码:[code]<field name="domain">[('is_this_region', '=', True)]</field>[/code]<br /><br />我用这个方法去写了一下(即用function字段来作为domain过滤),但是还是有问题。domain的过滤先与 is_this_region的求解,所以每个数据的is_this_region都是False,所以根本没有起到过滤的效果。经群里的大虾提示说 ,可以用 fnct_search, 因为domain过滤就是通过search()来实现的。 但是fnct_search我根本不知道怎么写?  也没有看到比较容易看懂得例子。所以在此发帖问一下是不是用fnct_search就能实现完成这个需求,并且fnct_search应该怎么写?  谢谢! 



  • 我的需求:  我想获得登录用户的信息,用这个信息在domain中过滤tree显示数据<br />res.users类:<br />[code]class ccc_users(osv.osv):<br /> _name = "res.users"<br /> _description = "自己的用户表"<br /> _inherit = "res.users"<br /> _columns = { <br /> 'region_id': fields.many2one('ccc.region', '区域'),    #指示该用户是哪个区域的<br /> 'parent_id': fields.many2one('res.users', '区域负责人'),<br /> 'child_ids': fields.one2many('res.users', 'parent_id', '本区域业务员'),<br /> }<br /> _sql_constraints = [<br /> ('uniq_name', 'unique(name)', u'用户姓名必须唯一,已经存在这个用户姓名的用户了')<br /> ][/code]<br /><br />客户表: [code]class ccc_partner(osv.osv):<br /> _name = "ccc.partner"<br /> _description = "ccc客户表"<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, ['region_id'])<br /> login_region = self.pool.get('res.users').browse(cr, uid, uid).region_id<br /> print result<br /> print login_region<br /> print result['region_id'][0]<br /> print login_region['id']<br /> if result['region_id'][0] == login_region['id']:<br /> res[id] = True<br /> # res[id] = False<br /> else:<br /> res[id] = False<br /><br /> return res<br /><br />        _columns = {<br /> 'name' : fields.char("客户名称", size=64, required=True),<br /> 'user_id' : fields.many2one('res.users', "责任人"),<br /> 'is_this_region': fields.function(_is_this_region_read, string='是否与登录用户同区域', type="boolean", store=True, readonly=True),<br /> }[/code]<br /><br />domain代码:[code]<field name="domain">[('is_this_region', '=', True)]</field>[/code]<br /><br />我用这个方法去写了一下(即用function字段来作为domain过滤),但是还是有问题。domain的过滤先与 is_this_region的求解,所以每个数据的is_this_region都是False,所以根本没有起到过滤的效果。经群里的大虾提示说 ,可以用 fnct_search, 因为domain过滤就是通过search()来实现的。 但是fnct_search我根本不知道怎么写?  也没有看到比较容易看懂得例子。所以在此发帖问一下是不是用fnct_search就能实现完成这个需求,并且fnct_search应该怎么写?  谢谢! 



  • 在 search 方法中. 获取 uid 能管辖的 region id 并组合一个 <br /><br />[('region_id', 'in', 查到的ids)] 的 domain 添加到现有 domain 中即可...



  • [quote author=mrshelly link=topic=4281.msg11668#msg11668 date=1343871623]<br />在 search 方法中. 获取 uid 能管辖的 region id 并组合一个 <br /><br />[('region_id', 'in', 查到的ids)] 的 domain 添加到现有 domain 中即可...<br />[/quote]<br /><br />谢谢,问题已经解决了 8)


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待