odoo

Odoo14介绍1:Ubuntu18.04通过源码安装Odoo14

馋奶兔 提交于 2020-02-25 19:52:11
本系列背景介绍 Odoo 是一个基于Python语言构建的开源软件,面向企业应用的CRM,ERP等领域,其目标是对标SAP,Oracle等大型软件提供商,但却通过仅仅一个平台满足企业所有管理的业务需求。 本系列文章针对Odoo 14版,从系统安装,开发环境配置,代码结构,主要功能升级,源码赏析,Anodoo对Odoo的关键扩展等角度,预先给大家介绍即将在2020年发布的这一最新版本。 本篇概述 Odoo14的安装和历史版本差不多,同样也包括安装文件,源码,Docker等多种形式,本文则通过源码方式在Ubuntu 18.04上安装Odoo 14. Postgresql数据库准备 在PostgreSQL官网,或者通过apt命令安装数据库。 https://www.postgresql.org/ https://www.postgresql.org/download/linux/ubuntu/ sudo apt update sudo apt install postgresql postgresql-contrib 由于是开发环境,使用当前用户,以及使用postgresql的createdb命令增加数据库: Created odoo14 通过源码安装 由于Anodoo在Odoo上进行源码级别的扩展,所以本文优先演示源码安装模式。 在http://nightly.odoo.com/

How do i fix ValueError: dictionary update sequence element #0 has length 1; 2 is required odoo 12?

≯℡__Kan透↙ 提交于 2020-02-25 06:47:49
问题 I am trying to build a custom module and i have run into the following error, i added the models to 'depends':[] and ended up with KeyError: 'ir.actions.views' when i remove the models from the 'depends':[] , i get the error below: 2020-02-15 06:58:28,956 8372 ERROR mask_agro odoo.modules.registry: Failed to load registry Traceback (most recent call last): File "/opt/odoo/odoo/odoo/modules/registry.py", line 60, in __new__ return cls.registries[db_name] File "/opt/odoo/odoo/odoo/tools/func.py

How do i fix ValueError: dictionary update sequence element #0 has length 1; 2 is required odoo 12?

◇◆丶佛笑我妖孽 提交于 2020-02-25 06:46:25
问题 I am trying to build a custom module and i have run into the following error, i added the models to 'depends':[] and ended up with KeyError: 'ir.actions.views' when i remove the models from the 'depends':[] , i get the error below: 2020-02-15 06:58:28,956 8372 ERROR mask_agro odoo.modules.registry: Failed to load registry Traceback (most recent call last): File "/opt/odoo/odoo/odoo/modules/registry.py", line 60, in __new__ return cls.registries[db_name] File "/opt/odoo/odoo/odoo/tools/func.py

【Odoo 8开发教程】第二章:Odoo生产环境部署设置

泄露秘密 提交于 2020-02-22 09:30:53
转载请注明原文地址: https://www.cnblogs.com/ygj0930/p/10826302.html 一:dbfilter 数据库访问规则设置 一个odoo实例可以连接到不同的数据库实例中,但某个时间只有一个数据库为odoo实例提供服务。当一个odoo实例有多个数据库可供操作时,用户每次登录时都需要先选择一个数据库才能跳转到登陆界面,这在生产环境中会让用户产生很大的困惑。因此,我们需要在生产环境中指定一个规则,让用户只能看到一个数据库并默认连接。 在启动文件.conf中,可以通过 dbfilter(注意,无下划线) 指定一个 正则表达式 ,指定一个默认的数据库。 处理配置文件,也可以在命令行启动odoo时,通过参数 --db-filter=正则表达式 来指定一个默认数据库。 注意:对于website模块,必须指定dbfilter才能正常使用。 二:PostgreSQL 数据库连接设置 odoo与postgreSQL通过UNIX socket连接。 需要在odoo的启动配置文件.conf中配置postgreSQL的相关信息,以便odoo通过SSH连接到数据库。 db_host = 数据库ip地址 db_port = 数据库端口,默认5432 db_user = 数据库账号 db_password = 数据库秘密 db_maxconn = 数据库连接池最大容量 db

odoo 装饰器用法@api

南笙酒味 提交于 2020-02-16 10:18:23
摘自:blog.csdn.net/cmzhuang/article/details/52932883 @api.one one装饰符自动遍历记录集,把self重新定义成当前记录。注意,返回值是一个list. web client有可能不支持该装饰。这时应该用 @api.multi修饰函数,函数中可能还需要条用 。 @api.multi self就是当前记录集。 @api.model 该装饰会将旧的API函数转换成带有装饰符的新API函数符号,使得代码可以平滑迁移。 @api.constrains 该装饰确保被修饰的函数在 @api.depends afun(self): pass 依赖的任一字段变化时(ORM or Form),触发该函数执行。 @api.onchange do_stuff(self): if self.fieldx == x: self.fieldy = 'toto' 例子中self是指form中的记录,当在on_change上下文时,所有的工作都是在缓存中进行,所以你可以在函数中直接修改记录集而不用担心会修改数据库, 这是和depends的最大区别。函数返回时将缓存和记录集中的差异返回给form. @api.noguess @api.returns 保证返回值的统一。将返回基于原始返回值指定model的记录集。 来源: https://www.cnblogs

Odoo新API

别来无恙 提交于 2020-02-16 09:44:58
原文地址:http://www.cnblogs.com/ygj0930/p/7145594.html 新API的装饰器主要有以下几种: model,multi,one,constrains,depends,onchange,returns 一、one one的用法主要用于self为单一集合的情况,与之相对应的是multi。被one装饰的方法会返回一个list,其值是:[None] 二、multi 与one相对应,one要求self是单一记录,而multi则要求self是多个记录的合集。因此,常使用for—in语句遍历self。 三、model model要求self是一个记录集,返回一个集合列表。 四、contrains python约束。 五、depends depends 主要用于compute方法,depends就是用来标该方法依赖于哪些字段的。 六、onchange onchange的使用方法非常简单,就是当字段发生改变时,触发绑定的函数。 七、returns returns的用法主要是用来指定返回值的格式,它接受三个参数,第一个为返回值的model,第二个为向下兼容的method,第三个为向上兼容的method 新API中用于特殊方法的有: cr,cr_context,cr_uid,cr_uid_context,cr_uid_id,cr_uid_id_contet,cr

(03)odoo模型/记录集/公用操作

混江龙づ霸主 提交于 2020-02-16 09:42:08
----------------- 更新时间 11:17 2016-09-18 星期日 11:00 2016-03-13 星期日 09:10 2016-03-03 星期四 11:46 2016-02-25 星期四 10:06 2016-02-24 星期三 14:51 2016-02-23 星期二 18:07 2016-02-19 星期五 17:44 2016-02-17 星期三 ----------------- *模型 模型是业务对象的呈现 * 系统已定义的模型查看 设置->技术->数据结构->模型 现在定义的有700多个 * 版本演变 from openerp.osv import fields, osv -> from openerp import models, fields ------------- osv.osv ---> orm.Model ---> models.Model osv.TransientModel ---> orm.TransientModel ---> models.TransientModel ------------ class MyModel(osv.osv): pass... ------------- class MyModel(osv.Model): pass... ------------ class MyModel(models

odoo 动态创建字段的方法

牧云@^-^@ 提交于 2020-02-16 09:01:35
动态创建字段并非一个常见的的需求,但某些情况下,我们确实又需要动态地创建字段。 Odoo 中创建字段的方法有两种,一种是通过python文件class中进行定义,另一种是在界面上手工创建,odoo通过state字段对这两种类型的字段进行区分。 通过界面创建的字段必须以x_开头。 笔者曾经试图通过python文件来动态创建base类型的字段,结果没有找到合适的方法。但是苦思冥想好久之后发现可以通过动态创建manual字段来达到这个目的。 应用: 国内人力资源应用中经常需要统计每个人的工资总表,而工资的构成是灵活动态的(虽然可以固定下来,但是一旦变动又要修改模块代码),这样想要汇总一个总表就变得非常困难, 利用动态创建字段的方法就非常容易的达到这个目的: 表中的工资构成是动态的 one2many ,不修改代码实现汇总总表: 来源: https://www.cnblogs.com/kfx2007/p/5601533.html

odoo时间过滤

筅森魡賤 提交于 2020-02-15 23:51:34
Odoo中本日、本月、上月过滤器实现方法 Odoo中本日、本月、上月过滤器实现方法 <filter string="今日订单" name="today" invisible="0" domain="[('date','=', current_date)]"/> <filter string="本月订单" name="month" invisible="0" domain="[('date','>=', time.strftime('%Y-%m-01')),('date','<', (context_today() + relativedelta(months=1)).strftime('%Y-%m-01') ) ]"/> <filter string="上月订单" name="month2" invisible="0" domain="[('date','<', time.strftime('%Y-%m-01')),('date','>=', (context_today() - relativedelta(months=1)).strftime('%Y-%m-01') ) ]"/> <filter string="本年订单" name="year" invisible="0" domain="[('date','<=', time.strftime('%Y-12-31')),(

odoo部分知识点注解

邮差的信 提交于 2020-02-08 22:34:30
bugmanger和quality部分代码解析 一.按钮的动作 1.1bug.py class Bug(models.Model): _name='bm.bug' _description='bug' name=fields.Char('bug简述',required=True) detail=fields.Text(size=150) is_closed=fields.Boolean('是否关闭') close_reason=fields.Selection([('changed','已修改'),('cannot','无法修改'),('delay','推迟')],string='关闭理由') user_id=fields.Many2one('res.users',string='负责人') follower_id=fields.Many2many('res.partner',string='关注者') var foo = ‘bar’; @api.multi def do_close(self): for item in self: item.is_closed=True return True var foo = ‘bar’; 1.2bugs.xml <header> <button name="do_close" type="object" string="关闭bug"/> <