场景描述: 项目需求中,经常会需要,当某个字段处某个特定状态时候,触发执行特定的方法:或者创建某条记录的时候,同时做另一个操作:如何实现类似的需求? 实现方式: odoo中提供了几种触发方式: 1. 字段级别 --前端触发:@api.onchange装饰器  ---相当于update变更操作的时候触发 2. 字段级别 --后端触发:@api.depends装饰器  ---相当于update变更操作的时候触发 3. 模型/表级别  --继承扩展create方法 4. 模型/表级别  --继承扩展w…
转两篇关于权限的2篇文章,加深这方面的认识.注:后面附有原作者地址,希望不构成侵权. https://www.cnblogs.com/crazyguo/p/6999408.html 第一篇:http://www.cnblogs.com/dancesir/p/6994030.html Odoo的权限的核心是权限组(res_groups).对每个权限组,可以设置权限组的菜单表示,对象表示,记录规则表示,字段表示. 1.菜单/对象级别 设置哪些人可以访问哪些菜单/对象,对象的访问权限包括创建.读.写.…
例如: company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env['res.company']._company_default_get('crm.team')…
待补充 http://ju.outofmemory.cn/entry/181972…
odoo开发笔记 -- div标签代替odoo button写法 并调用自定义js <footer> <div id="confirm_request_cloud_report" class="btn btm-sm button oe_highlight" style="font-size:12px;">确定</div> <button special="cancel" string=…
odoo开发笔记 -- 搜索视图继承扩展…
odoo开发笔记 -- 后台日志输出及分析 附:日志分析软件…
       Odoo的市场定位是SME(中小型企业),这个市场的ERP产品,多如牛毛,产品各具特色.不过,Odoo的自动化处理机制,可以睥睨天下,无人能及.包括一些大型国产软件,如用友.金蝶也不具备如此强大的自动化业务处理功能.Odoo的业务自动化机制,可以非常容易地扩充ERP系统功能,非常容易地让业务工作自动化. Odoo自动化动作 如下图,增加一个自动化动作,“自动删除过期的SaaS DB”.系统会按定义好的条件筛选出符合条件的数据记录(业务对象),自动执行定义好的Server Actio…
odoo有着强大的消息记录.通知机制: 实际开发中,常常会有客户的需求,页面上form视图中的某些字段不允许反复修改, 假如有的用户修改了,恶意搞坏,往往容易给公司利益造成损失,或破坏,那么如何有效的记录相关用户的操作, 提供一定的安全审计功能? 别担心,odoo已经为我们考虑到了!!! 下面我们就来介绍下, 首先,先保证整体基本的消息记录功能,两个地方需要修改,模型和form视图 在你需要消息记录的模型申明中,添加如下红色部分代码: class TestModle(models.Model):…
http://blog.csdn.net/M0relia/article/details/39025947…
1. 类继承 2. 原型继承 3. 委托继承 待完善 https://www.cnblogs.com/chenshuquan/p/10523626.html…
python中一切皆对象! odoo基于python开发,那么odoo中也可以理解成一切皆对象. 我们在python中定义类的时候,一般会用到self,用来表示当前对象自己. 那么odoo中的self除了python语法中,自带的用法,还有哪些特殊的用法呢? 一:self是什么 目前新版的Odoo中使用到的self,是对  游标cr.用户ID.模型.上下文.记录集.缓存  的封装. 我们可以通过 self.XX 获取到这些封装的东西,比如:self.cr.self.uid. 二:通过直接设置属性…
在odoo设置界面,点击用户,进入用户配置界面,会看到: 访问权 | 个人资料菜单 在访问权 page菜单界面,可以看到系统预制的一些模块都会显示在这里, 那么,我们自己开发的模块如何显示在这块呢,从而方便在创建用户的时候,给该用户访问我们自己开发模块的权限! 实现方式: 在odoo后台代码中增加两个文件,并在__manifest__.py中申明引用这两个文件. 具体编写: 新建两个文件夹: (1) 在自己模块根目录下,创建data 和 security 两个目录,一般这两个目录也是平时odoo…
odoo数据库 导入.导出 首先odoo框架下postgresql数据库中,表结构的存储方式: 存在id(小写),并没有所谓的外部ID 例如数据库中的国家表:模块名_tb_country   (注意:odoo框架下,数据库中生成的表命名规则是,模块名_实际表名) id   code  name 1   001   中国 2   002   美国 3   003   德国 ... odoo系统自带功能,前台界面导出的时候:导入兼容导出模式 这种情况下导出的csv表数据结构 :  注意这里导出的id…
附件上传基本原理实现,可以参考这篇: https://www.cnblogs.com/ljwTiey/p/7348291.html http://blog.csdn.net/wangnan537/article/details/41903159 首先我们看一下odoo界面默认的附件功能,有木有感觉不是很友好!囧 :) 下面给小伙伴们介绍另一种odoo自带的附件管理方式! 首先,在你的模型中增加如下定义: ##############################################…
转载请注明:http://www.cnblogs.com/igoslly/p/6858656.html   初步设置Menu   设置Menu,在ActionBar上添加按钮操作:         在main/res目录下添加menu文件夹,创建main.xml文件 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app=" http://schemas.android.com…
开发中经常有这样的场景,需要给某个日期或者时间的字段默认值: 例如: 日期,默认今天 时间,默认当前时间 可以在odoo模型定义中进行设置, 如下样例提供参考: test_data = fields.Date(string=u"日期", default=fields.Date.today) # 默认值为:当天 test_time = fields.Datetime(string=u"时间", default=fields.Datetime.now) #默认值为:系统…
场景描述: 在已启动开发的模块中,odoo顶部一级菜单只有一个“会员管理”,需求是:在同一级顶部菜单,增加新菜单“产品管理”.举例如图:       处理方式: 按照odoo的机制,实现这种效果,可以通过多种方式: 1. 新增加一个独立模块,用作 “产品管理” 2. 共用一个模块,开发者模式下,通过对菜单进行配置,实现效果.(弊端:程序升级后,需要重新配置) 3. 共用一个模块,通过代码实现.(这里介绍的就是这种,基于odoo10) 很简单,只需要在模块代码-->views --> menu.…
(1) odoo视图字段,如果是readonly,默认该数据是不会往后台传递的,因此,保存数据的时候,该字段的数据是不会存到数据库中的.(待确认,字段中增加默认值,保存) (2)视图界面,注释的时候,一般情况,饿哦们认为注释的代码,启动服务时,就不会被解释:其实不是,当视图中没有涉及变量的action视图ID引用指向的时候,这种情况下,确实没有影响:但是,如果被注释的该段代码,包含了引用另一个窗口视图的ID,即使注释掉,当你更新升级模块的时候,还会加载,出现视图外部extend id找不到的异常…
模块名称 技术名称 作者 电子发票管理 account OpenERP SA 会计与财务 account_accountant OpenERP SA 合同管理 account_analytic_analysis Camptocamp / Odoo 辅助核算默认值 account_analytic_default OpenERP SA 多重辅助核算方案 account_analytic_plans OpenERP SA 英国会计系统 account_anglo_saxon OpenERP SA,…
场景描述: 在添加自定义服务器动作 “复制全部”后发现直接创建了新的记录,并且直接进入到form保存完的状态. 如何解决: if yourself_obj_copy: return { 'type': 'ir.actions.act_window', 'view_type': 'form', 'view_mode': 'form', 'res_model': '你的模块名.模型名', 'res_id': yourself_obj_copy.id, 'context': self.env.cont…
看一下partner这个表, 客户和供应商,都用这个表,那怎么区分呢: 供应商: 客户 注意这两个里面用domain来进行区分:   <field name="domain">[('s_category_id','!=',False)]</field> <field name="domain">[('c_category_id','!=',False)]</field>   表相同,出来的结果不同.当然,这两个doma…
实现效果参考: 1. 开发者模式 -- 设置 -- 工作流 -- 编辑 -- 添加项目 2. 会计模块 -- 管理 -- 付款条款 -- 编辑/创建 实现方式,很简单.只要视图界面写个一对多关联字段就可以.不需要加任何属性,odoo本身已经封装了该效果. 只需要 根据实际需求,定制弹出来的新窗口视图样式就行.…
场景描述: 对比了几个定时调度的框架,发现各有优缺点: celery 很强,异步定时调度,异步周期调度,也有延时调度的功能,但是延时调度的案例比较少,遂暂时不使用. queue_job,一个odoo第三方应用模块,同样功能强大,可以满足日常的异步方法执行: 模块github地址:https://github.com/OCA/queue/tree/10.0/queue_job 但是我们的场景稍微有些不同,就是需要在异步调用的基础上增加一个延时(例5秒): 一般的异步调度机制:异步执行避免了任务的阻…
场景描述: 更新代码,重启服务服务后,odoo后台报错,提示关键字:in resolve_deps field = model._fields[fname]  KeyError: 'entry_id' 没有其他信息了,一头雾水,因为最近修改代码文件比较多,代码中用到字段“entry_id”的地方很多,一下不知是哪块的问题... 如下图: 从输出的异常日志可以看出,是模型依赖的问题.于是开始网上查询类似案例,找到如下一则: https://www.odoo.com/zh_CN/forum/help…
场景描述: odoo模块化开发的架构理念,科学&高效, 可以让很多业务场景,尽可能松耦合:让开发人员的主要精力,关注在当前的业务逻辑: 所谓「前人栽树,后人乘凉」,模块整体好比一棵大树, 开发过程中,你发现了大树的某个枝干上[模块下某个类]前人挂了个牌儿A-B, 上边书道:“该枝干继承了某根节点[父类A]的功能,并扩展了它的方法!”, 有一天,原大树枝繁叶茂,根部延长出另一棵树[原模块的扩展模块], 此时呢,新树上的某个枝干,也要继承之前那个根节点A,并扩展它的方法, 同样需要在该枝干上挂个牌儿…
场景描述: 开发过程中,有时候我们需要去除odoo自带的一些样式, 比如,form视图,要集成自定义的界面时,就希望把顶部的服务动作 和 分页按钮 隐藏掉. 处理方式: 分两种情况: 1. 保留顶部区域,只隐藏“服务器动作”& “分页” 2. 顶部区域全部隐藏 待补充…
odoo后台日志记录功能 修改启动文件odoo.conf 将参数logfile注释放开, logfile = /var/log/odoo/odoo-server.log login_message = False login_message参数提供odoo日志记录的几种级别, 可选参数及含义:…
app+db在一台服务器: odoo.conf配置文件: db_host = False db_maxconn = 64 db_name = False db_password = 123456db_port = False db_template = template1 db_user = odoo app+db在不同服务器: odoo.conf配置文件:db_host = 192.168.1.222 db_maxconn = 64 db_name = test   # 数据库名db_pass…
场景描述: 开发过程中,有时候会遇到,模块安装的时候,一直卡着,走不过去:或者安装报错,导致进入了系统! 这个时候,怎么处理呢? 先简单说下,odoo中模块的升级有4个状态,模块相关的安装情况记录在表:ir_module_module 中: state uninstallable  不可安装 uninstalled    未安装 安装中 to upgrade   升级中 installed       已安装 例如:取消升级中的模块.注意这里只是举例,查找了“所有”的记录,可以指定特定的某个模块…