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数据后,抛出错误导致无法进入页面 -- ::, INFO aeo odoo.addons.base.ir.ir_attachment: _read_file reading /var/lib/odoo/filestore/aeo//576746a590a5ec2384a9428a907bc44e9117ee1e Traceback (most recent call last): File , in _file_read r = open(full_path,'rb').…
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数据库 导入.导出 首先odoo框架下postgresql数据库中,表结构的存储方式: 存在id(小写),并没有所谓的外部ID 例如数据库中的国家表:模块名_tb_country   (注意:odoo框架下,数据库中生成的表命名规则是,模块名_实际表名) id   code  name 1   001   中国 2   002   美国 3   003   德国 ... odoo系统自带功能,前台界面导出的时候:导入兼容导出模式 这种情况下导出的csv表数据结构 :  注意这里导出的id…
今天折腾了一天一个小问题,就是明明正确的php代码在访问数据库的时候总是提示DB ERROR.后来才发现是填写数据库名的时候,写成了该数据库的ip地址(其实也是本机ip但是本机还是不能访问),而不是localhost. 归根到底这个问题的根源是mysql未开启远程访问,开启的具体方法为: D:\wamp\Apache2\conf\alias\phpmyadmin.conf 找到 deny from all allow from all 这两行删除改为 allow from all 另外,mysq…
1.方法一:创建DBL(data base link) CREATE PUBLIC DATABASE LINK 数据链名称 CONNECT TO 登陆用户名 IDENTIFIED BY 密码 USING '(DESCRIPTION =     (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = TCP)(HOST = 对方Oracle服务器的IP地址)(PORT = 端口号))     )     (CONNECT_DATA =(SERVICE_NAME =…
场景描述: odoo.conf文件指定了数据库配置,如果docker打包的时候,没注意,新环境启动该镜像,会导致并没有连接本地的数据库,如果你配置文件中的数据库地址,当前这台服务器也可以访问到,那么问题就来了,启动之后,会将源先的应用数据库直接清空或覆盖掉,部署的时候,这块必须注意.…
部署结构: 待更新! ----服务器硬件配置: 操作系统:ubuntu16.04-64bit CPU/内存:4核8G 1. 基础环境安装 nginx离线安装: docker环境安装: 2. 官方容器镜像下载: odoo-image: postgresql9.6-image: 3. 启动app1 4. 启动app2 5. 更新不同应用模块代码 6. Nginx代理配置 7. 验证访问…
       Odoo的市场定位是SME(中小型企业),这个市场的ERP产品,多如牛毛,产品各具特色.不过,Odoo的自动化处理机制,可以睥睨天下,无人能及.包括一些大型国产软件,如用友.金蝶也不具备如此强大的自动化业务处理功能.Odoo的业务自动化机制,可以非常容易地扩充ERP系统功能,非常容易地让业务工作自动化. Odoo自动化动作 如下图,增加一个自动化动作,“自动删除过期的SaaS DB”.系统会按定义好的条件筛选出符合条件的数据记录(业务对象),自动执行定义好的Server Actio…
odoo默认的数据库为postgresql数据库, PG是个非常强大的数据库,也是未来的一个趋势. 对于odoo的数据备份,odoo提供了自己的备份方式, 1. 从前台页面.输入odoo应用访问地址,例如:192.168.1.188:8069/web/database/manager 可以直接选择自己需要的数据库,进行手动复制,备份,和删除. 2. odoo应用社区也提供了一些第三方备份的模块,感兴趣的可以自行搜索. 3. 从数据库级别,即:按照常规数据库的备份恢复来操作. 这里需要注意一点,对…
python中一切皆对象! odoo基于python开发,那么odoo中也可以理解成一切皆对象. 我们在python中定义类的时候,一般会用到self,用来表示当前对象自己. 那么odoo中的self除了python语法中,自带的用法,还有哪些特殊的用法呢? 一:self是什么 目前新版的Odoo中使用到的self,是对  游标cr.用户ID.模型.上下文.记录集.缓存  的封装. 我们可以通过 self.XX 获取到这些封装的东西,比如:self.cr.self.uid. 二:通过直接设置属性…
odoo有着强大的消息记录.通知机制: 实际开发中,常常会有客户的需求,页面上form视图中的某些字段不允许反复修改, 假如有的用户修改了,恶意搞坏,往往容易给公司利益造成损失,或破坏,那么如何有效的记录相关用户的操作, 提供一定的安全审计功能? 别担心,odoo已经为我们考虑到了!!! 下面我们就来介绍下, 首先,先保证整体基本的消息记录功能,两个地方需要修改,模型和form视图 在你需要消息记录的模型申明中,添加如下红色部分代码: class TestModle(models.Model):…
附件上传基本原理实现,可以参考这篇: https://www.cnblogs.com/ljwTiey/p/7348291.html http://blog.csdn.net/wangnan537/article/details/41903159 首先我们看一下odoo界面默认的附件功能,有木有感觉不是很友好!囧 :) 下面给小伙伴们介绍另一种odoo自带的附件管理方式! 首先,在你的模型中增加如下定义: ##############################################…
场景描述: 最近在做项目的过程中,需要需要将odoo应用集成到其他系统中, 在对方的系统中点击我们的应用,打开对应系统,但是界面不做跳转,在当前页面打开,并且浏览器地址栏只显示IP+应用名,不让显示odoo中的action_id及menu_id等其他信息! 如何实现? 我们先来看下,odoo程序我们在浏览器访问时,通常的地址栏信息:IP+端口/web.........各种id http://192.168.1.188:8069/web#min=1&limit=80&view_type=li…
后台采用Django开发,可以体会到开发的便利之处,对于一个项目来说,首先最重要的是数据库的设计,那么在Django下数据库设计主要是如下步骤: 1,需求分析,这点子不用多说,而我也深刻体会到了没有原型的时候就开始开发的困难之处,每次需求更改就会带来后台的数据和对应接口的一次变更.费时费精力 2.有了需求,那么开始数据库的设计,在Django中,并不需要直接去操作数据库,而且使用继承modesl.Model的类,在类中定义自己的模型,然后使用Python manage.py syncdb就可看到…
场景描述: 开发过程中,有时候我们需要去除odoo自带的一些样式, 比如,form视图,要集成自定义的界面时,就希望把顶部的服务动作 和 分页按钮 隐藏掉. 处理方式: 分两种情况: 1. 保留顶部区域,只隐藏“服务器动作”& “分页” 2. 顶部区域全部隐藏 待补充…
odoo 时区问题 待补充 odoo默认数据库是以UTC时间存放的:这也是odoo设计优秀的地方.…
(1) odoo视图字段,如果是readonly,默认该数据是不会往后台传递的,因此,保存数据的时候,该字段的数据是不会存到数据库中的.(待确认,字段中增加默认值,保存) (2)视图界面,注释的时候,一般情况,饿哦们认为注释的代码,启动服务时,就不会被解释:其实不是,当视图中没有涉及变量的action视图ID引用指向的时候,这种情况下,确实没有影响:但是,如果被注释的该段代码,包含了引用另一个窗口视图的ID,即使注释掉,当你更新升级模块的时候,还会加载,出现视图外部extend id找不到的异常…
./odoo-bin shell -d test1 -c /home/odoo/odooshare/odoo.conf ./odoo-bin shell -d 数据库名 -c 指定配置文件…
在odoo设置界面,点击用户,进入用户配置界面,会看到: 访问权 | 个人资料菜单 在访问权 page菜单界面,可以看到系统预制的一些模块都会显示在这里, 那么,我们自己开发的模块如何显示在这块呢,从而方便在创建用户的时候,给该用户访问我们自己开发模块的权限! 实现方式: 在odoo后台代码中增加两个文件,并在__manifest__.py中申明引用这两个文件. 具体编写: 新建两个文件夹: (1) 在自己模块根目录下,创建data 和 security 两个目录,一般这两个目录也是平时odoo…
转两篇关于权限的2篇文章,加深这方面的认识.注:后面附有原作者地址,希望不构成侵权. https://www.cnblogs.com/crazyguo/p/6999408.html 第一篇:http://www.cnblogs.com/dancesir/p/6994030.html Odoo的权限的核心是权限组(res_groups).对每个权限组,可以设置权限组的菜单表示,对象表示,记录规则表示,字段表示. 1.菜单/对象级别 设置哪些人可以访问哪些菜单/对象,对象的访问权限包括创建.读.写.…
模块名称 技术名称 作者 电子发票管理 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…
odoo框架 整体权限可以分为4个级别: (1) 菜单级别: 不属于指定菜单所包含组的用,看不到相应菜单.不安全,只是隐藏菜单,若用户知道菜单ID,仍然可以通过指定URL访问(2) 对象级别: 对某个对象是否有‘创建,读取,修改,删除“的权限.OE中的对象可以简单理解为表对象,比如“客户”,“产品”,“销售订单”等都是对象(3) 记录级别: 对对象表中的数据的访问权限.比如同样访问“客户”对象,业务员只能对自己创建的客户有访问的权限,而经理可以访问其所辖的业务员的所有“客户”对象,这里的访问也可…
场景描述: 对比了几个定时调度的框架,发现各有优缺点: 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模型定义中进行设置, 如下样例提供参考: test_data = fields.Date(string=u"日期", default=fields.Date.today) # 默认值为:当天 test_time = fields.Datetime(string=u"时间", default=fields.Datetime.now) #默认值为:系统…