OpenERP 在context中写自己的部门ID
使用OpenERP自定义模块开发的时候,你会发现,有一个uid(当前登录用户id)特别好用,不管是在xml的domain
条件表达式中,还是在类中,都能很方便的使用uid.有一段时间就一直在琢磨,这个uid 是什么时候赋值的。感觉是在
session中,一直没有找到。后来需要获取当前登录人的部门id,把department_id做成类似uid这么的变量,就爽了,就
太方便了。
注:Search 资料显示 ['&',('department', '=', user.context_department_id.id),('state', '=', 'pr_draft')]
提示context_department_id不存在,其实这是OE7.0之前的用法,6.0中有类似的方法定义:
- def get_users_department(self, val):
- dep = val.get('department')
- fields = ['name']
- data = [dep]
- if not dep:
- return False
- return self.import_object(fields, data, 'hr.department', 'hr_department_user', dep)
- def get_user_mapping(self):
- return {
- 'model' : 'res.users',
- 'hook' : self.import_user,
- 'map' : {
- 'name': concat('first_name', 'last_name'),
- 'login': value('user_name', fallback='last_name'),
- 'context_lang' : 'context_lang',
- 'password' : 'password',
- '.id' : '.id',
- 'context_department_id/id': self.get_users_department,
- 'user_email' : 'email1',
- }
- }
其实也不是那么神秘,当你实现了下面的步骤:
1) 在context中写入自己的东西(测试)
1.1) 定义一个扩展类,是函数字段
- class extend_user(osv.osv):
- _name = "res.users"
- _inherit = ['res.users']
- # 返回我的id
- def _write_mine_id(self, cr, uid, ids, name, args, context=None):
- result = dict.fromkeys(ids, 1024)
- return result
- _columns = {
- 'context_mine_id': fields.function( _write_mine_id,type="integer"),
- }
- extend_user()
1.2) 在Firefox的Debug下,看请求,奇迹发生了
说明: 不是当时的截图,应该是{"mine_id:": 1024}
1.3) 原理剖析
抽时间在做梳理了
2) 在context中写入当前登录人department_id
2.1) 修改上面的类文
- class extend_user(osv.osv):
- _name = "res.users"
- _inherit = ['res.users']
- # 获取用户关联的部门
- def _get_self_department_ids(self, cr, uid, ids, name, args, context=None):
- result = dict.fromkeys(ids, False)
- emp = self.pool.get('hr.employee')
- for id in ids:
- emp_ids = emp.search(cr, uid, [('user_id', '=', id)], context=context)
- emp = emp.browse(cr, uid, emp_ids[0], context=context)
- result[id] = emp.department_id
- return result
- _columns = {
- 'context_department_id': fields.function(_get_self_department_ids,type="hr.department"),
- }
- extend_user()
2.2) 结果看上面的截图,出来了
2.3) 注意函数字段的类型是 type="hr.department",你没看错就是这个
2.4) 获取部门id另一种方法,职员同名存在问题
- def get_current_user_department_id(self, cr, uid, ids, context=None):
- list_resource_id = self.pool.get('resource.resource').search(cr, uid, [('user_id','=',uid)], context=context)
- username = self.pool.get('resource.resource').browse(cr, uid, list_resource_id[0], context=context).name
- list_emp_id = self.pool.get('hr.employee').search(cr, uid, [('name_related','=',username)], context=context)
- depart_id = self.pool.get('hr.employee').browse(cr, uid, list_emp_id[0], context=context).department_id
- return depart_id
注意:这个return 的depart_id 可不是integer类型,raise Exception(type(depart_id)) :
Exception: <class 'openerp.osv.orm.browse_record'>
raise osv.except_osv(_("test"), _(depart_id))
OpenERP 在context中写自己的部门ID的更多相关文章
- 关于如何在其他包中写controller和简单介绍@SpringBootApplication
本文参考博客:https://blog.csdn.net/u013473691/article/details/52353923 关于@Configuration和@Bean参考博客:https:// ...
- 在mybatis中写sql语句的一些体会
本文会使用一个案例,就mybatis的一些基础语法进行讲解.案例中使用到的数据库表和对象如下: article表:这个表存放的是文章的基础信息 -- ------------------------- ...
- 一种获取context中keys和values的高效方法 | golang
我们知道,在 golang 中的 context 是一个非常重要的包,保存了代码活动的上下文.我们经常使用 WithValue() 这个方法,来往 context 中 传递一些 key value 数 ...
- x01.os.12: 在 windows 中写 OS
在 windows 中写操作系统,需要一系列的辅助工具.在此,要感谢川谷秀实!所有工具,都在 z_tools 文件夹中.有了大师的帮助,不妨也来尝试在 windows 中写一把 OS. 源代码及工具可 ...
- oracle调用java方法的例子(下面所有代码都是在sql/plus中写)
在Oracle中调用Java程序,注意:java方法必须是static类型的,如果想在JAVA中使用system.out/err输出log. 需要在oracle 中执行"call dbms_ ...
- 【Filter 不登陆无法访问】web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面的功能
在web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面,而重定向到登陆界面的功能. 项目是用springMVC+spring+hibernate实现 (和这个没有多大关系) 第一步: 首先 ...
- python中写shell(转)
python中写shell,亲测可用,转自stackoverflow To run a bash script, copy from stackoverflow def run_script(scri ...
- css笔记——关于css中写上charset “utf-8”
当css文件中写上 charset "utf-8" 时需要将body和html的样式分开写 例如: html,body{margin:0;padding:0;font-family ...
- 用RelativeLayout布局可以在imageview中写上文字
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
随机推荐
- Marshal.SizeOf和sizeof的区别
sizeof在非Unsafe环境下只能用于预定义的一系列类型,如Int,Short等等.而在Unsafe环境下,sizeof可以被用于值类型,但是值类型中不可以有引用类型,否则C#编译器会报错: er ...
- 编译Opencv的GPU,利用CUDA加速
首先检查自己的机器是否支持,否则都是白搭(仅仅有NVIDIA的显卡才支持.可在设备管理器中查看) 假设不用GPU.能够直接官网下载预编译好的库 环境: 1 VS2013 2 Opencv2.4.9 3 ...
- mormot允许跨域访问
mormot允许跨域访问 ctxt.OutCustomHeaders:='Access-Control-Allow-Origin:*' 允许跨域访问 其实其他HTTP控件要实现跨域访问,也是类似设置. ...
- 开始Admob广告盈利模式详细教程
例子工程源码下载地址: 下载源代码 当然,我也参考了一些网上的资料,主要有: AdMob:在android应用中嵌入广告的方案 如何在Android ...
- python测试开发django-8.windows系统安装mysql8教程
前言 MySQL 是最流行的关系型数据库管理系统,可以在本地搭建一个mysql的环境,便于学习. windows7/windows10 mysql-8.0.11-winx64 下载安装包 mysql的 ...
- Selenium2+python自动化33-文件上传(send_keys)
前言 文件上传是web页面上很常见的一个功能,自动化成功中操作起来却不是那么简单. 一般分两个场景:一种是input标签,这种可以用selenium提供的send_keys()方法轻松解决: 另外一种 ...
- Android之判断时间是否为今天
字符串: sdate = 2013-07-16 13:35:02 /** * 判断给定字符串时间是否为今日 * @param sdate * @return boolean */ publ ...
- Jquery 获取第一个子元素
<ul> <li>John</li> <li>Karl</li> <li>Brandon</li></u ...
- mysql数据库查询优化
上两周一直想办法提高查询速度,取得一点效果,解决了部分问题,记下来以便将来自己查看. 由于公司没有专门的DBA,我自己对mysql数据库也不是很熟悉,而且这个JAVA开发的网络审计系统的管理系统,是经 ...
- 盘点linux系统中的12条性能调优命令。
导读 性能调优一直是运维工程师最重要的工作之一,如果您所在的生产环境中遇到了系统响应速度慢,硬盘IO吞吐量异常,数据处理速度低于预期值的情况,又或者如CPU.内存.硬盘.网络等系统资源长期处于耗尽的状 ...