odoo开发中碰到的奇奇怪怪的问题(持续更新)

1. Date类型字段给了默认值为当天,但是创建的时候与实际时间相隔一天(并不是时区的问题),如下:

 这张图片为2月10日创建,默认值却是2月9日。

解决方法:

2.many2many字段保存后会自动排序,导致后续生成的明细无法按照自己的意图来,如下

 

 具体码数字段原来关联了8,9,10,编辑然后添加1,2,3,保存后该字段会自动排序又变成1,2,3,8,9,10,此处应该是自动按照id来重排了(给该字段的关联模型添加_order属性使之无序也尝试过了,没用),很多时候我们不需要这样的自动排序(如我本想按照8,9,10,1,2,3的顺序遍历这个字段,但是它自动排序后遍历的顺序就变了)。

解决方法:新增加一个表,里面有两个字段,一个整数型,记录顺序;一个多对一,关联具体码数。然后使销售这个表多对多这个新表,就能将我们具体码数的选择顺序记录在这个新表中,因为调用write方法时,具体码数中的值还是按照我们选择的顺序来排的,它在保存之后才会自动按id来排,所以我们在write之前可以将这个顺序数据写进新表里,之后遍历新表就可以了。

3.kanban视图的继承

上方红色框内必须为extension,否则无效

元素标签的隐藏用上面两个方法均可

4.跳转至向导后,修改明细字段,当一条明细某个字段值为空时,该明细会直接删除

 原因:工序字段设置了required="1",这种字段编辑后未填,向导模型并不会提示必填没填,而是会直接删除掉此数据。

解决方法:删除掉此字段的required="1"后即可解决问题。

5.将一个服务器的数据库复制到另外一个服务器上,登录后出现白屏如下

 原因:odoo数据库里面的一些静态数据或者附件会存在一个以该数据库命名的文件夹中,当你移动、复制这个库到另外一个服务器上之后,如果你把这个数据库的名称改掉,它就会找不到这些静态文件,查看日志会有以下错误提示

 解决方法:复制的数据库名称保持和原来一样即可解决

其他白屏问题现象:
备份出来的数据库在恢复到其他数据库上后,登录odoo显示空白页(非网络问题)。刷新,重启等方式都无法解决,经查找资料发现是由于静态css文件是存储在数据库之外的,数据库备份时静态文件和css文件不会一起备份,所以当还原数据库后,页面出现空白是由于静态文件路径是指定的,但是本地又没有,找不到导致的。

解决方法:

    DELETE FROM ir_attachment WHERE url LIKE '/web/content/%';
    执行完毕后,重启数据库服务以及odoo服务。
    重启服务,升级base模块

    然后还可能存在模块图标消失的问题,升级web模块

6.当我们给一些系统基础表,如res_partner,res_user,base这些表添加字段,会出现无法重启的情况,页面Internal Server Error 500,后台提示res_partner没有某某字段(还没升级当然没有,你倒是给我个升级的机会啊,在pycharm的启动器里添加-u 模块名也没法解决)。

解决方法:

a.新创建一个模块,将继承写到这个单独的模块里面,然后安装即可。此方法缺点:下次再需要在这个表添加新字段,还得新建模块。

b.直接去数据库找到这个表,给该表直接插入字段,简单粗暴,sql语句:

ALTER TABLE table-name ADD COLUMN cloumn-name varchar;

table-name为表名,cloumn-name为字段名, varchar为字段类型(根据实际需求来)

 插入完成后,再重启服务就不会报错了。

7.tree视图字段添加装饰器atrrs="{'invisible':[('state', 'in', ('done', 'cancel'))]}"时,字段会隐藏值而不是隐藏整个字段,如果添加invisible="1"则是隐藏字段,如下

8.不可空继承。我在模块升级报错,提示如下

 提示为某个xml文件上的视图出错,一开始以为是那个xml文件里多了个字符或者少了个字符啥的,然后仔细检查了那个xml文件好几遍也没有发现,然后进断点发现不是这个xml的问题,而是另外一个继承于此xml视图的问题。

原因:不可空继承。继承视图后,一定得写一些东西,而不是只继承,不写,如下。

9.docker-compose启动报错

windows上用docker-compose拉容器报错,提示如下

 解决方法

10.数据库迁移问题解决方案,问题5的扩展

当出现白屏或者以下错误时:

原因:某某css加载失败,因为数据库迁移以后,ir_attachment表中存储的静态文件路径仍然是原路径,新环境中查找不到,然后就会报错

解决方法:删除ir_attachment表中的'url'字段以'/web/content'开头的所有数据

delete from ir_attachment where url ilike '/web/content/%';

然后升级base模块,问题解决

12.odoo域

 search里面的domain,sale_ids是many2many字段,sale是单个单据,此时使用in也是可以的,可以匹配到sale_ids包含sale的。

13.点按钮弹出来的页面无法中的tree无法按照模型的_order属性或者tree视图上的default_order属性排序,需要手动排序后返回

14.计算方法和onchange方法里面尽量不上调用unlink(),调用后之前给表单赋值的操作会失效,尽可能其他等效果的方式来实现删除功能;unlink()应当在赋值之前进行,如果先赋值,后执行unlink,则赋值会失效,如:

 self.qty = 10
 self.partner_id.unlink()
则删除执行完成之后,self.qty并不等于10,而是变成0

15.related字段不支持数据导入更新,但是添加readonly=False后可以支持导出,导入更新数据

 而且同时添加了store=True和readonly=False后,页面上编辑该字段,起related的源字段上的该属性也会一同变化,如上图中的材质字段material,我在当前模型中编辑此字段后,product_id表中的此属性会一同变化。

16.related字段可作为search方法的搜索条件(不加store=True也可以),计算字段不可作为search方法的搜索条件(除非加store=True)

17.模型one2many自己

_parent_name = "location_id"

给类添加此属性,类就可以one2many自己,具体可参考源生stock.location模型

18.browse方法,即使数据id不存在,也不会报错或者提示

比如 product_id = self.env['product.product'].browse(111111)

即使这个id 111111不存在,这行代码也不会有问题,而且还能用他来个其他字段赋值,如

self.product_id = product_id.id

当然,赋值完成后会报错,因为压根不存在这个id的产品

所以这个方法的使用最好搭配上exists方法,如下

if not order_id.exists():

         raise UserError('产品不存在!')

19.docker容器down掉重新up后,odoo服务一直报错:KeyError: 'ir.http'  

down掉服务后,重新up可能会报这个错误,这时需要将docker-compose里面的数据卷和服务名称改一下,由odoonetwork80 改成odoonetwork81

可能原因:服务重启拉起以后由于原来的networks已被占用,所以这里重新建一个就不会报错了

20.compute字段,没加store=True也无法进页面自动计算。

开始找了各种原因,最后发现是因为字段设置了company_dependent=True,导致无法运算

将company_dependent改成False即可

21.odoo新添加的css样式升级以后没有加载成功,刷新,重启都没有效果。

解决方法: ctrl+F5 (加载后台资源刷新,不同于直接F5刷新)

22.self.env.ref('#视图id') 这种方式读取视图数据会用到 ir.ui.view这个模型的read权限;当用户没有这个权限,但进行的操作里面有涉及到读视图的这个方法,就会引发权限错误,报错如下

解决方法:

a.给予该用户此权限

b.方法开始之前先加上以下代码,意思是超级用户执行逻辑

self = self.with_user(self.env.user).sudo()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Odoo是一款开源的企业管理软件,它提供了一整套的应用程序,包括销售、采购、库存、会计、人力资源等模块,适用于各种规模和类型的企业。针对文用户,Odoo也提供了开发手册,方便用户学习和开发自己的定制化应用。 Odoo 开发手册包含了丰富的内容,主要包括以下方面: 1. 环境搭建:手册详细介绍了如何在本地搭建Odoo开发环境,包括安装数据库、安装Odoo源码、运行Odoo服务等步骤,为开发者提供了一个良好的开始。 2. 模型和视图开发:手册讲解了Odoo的模型和视图的概念和使用方法,帮助开发者理解和操作数据模型,设计用户界面。 3. 定制化开发:手册介绍了如何在Odoo进行定制化开发,包括模块创建、字段定义、视图设计、业务逻辑编写等内容,通过示例代码和步骤,让开发者能够快速上手。 4. 报表和安全性:手册还涵盖了报表和安全性方面的内容,介绍了如何创建和设计报表,以及如何设置用户权限和数据安全性控制。 通过Odoo开发手册,文用户可以更加方便地学习和开发Odoo应用,帮助他们深入理解Odoo的各个模块和功能,并能够根据自身需求进行定制化开发。手册内容详实而且易于理解,对于初学者和有一定经验的开发者来说都是非常有价值的学习资源。 ### 回答2: Odoo是一款集成化的企业管理软件,它提供了丰富的功能和模块,包括销售、采购、库存、制造、人力资源、会计等等。而Odoo开发手册则是针对Odoo软件进行开发的指南。下面我将通过300字进行回答。 首先,Odoo开发手册为开发人员提供了详细的概述和基本概念的介绍。它解释了Odoo的核心架构,包括模型、视图、控制器和报表等方面。通过阅读开发手册,开发人员可以深入了解Odoo的内部结构和工作原理,为其定制开发提供了必要的基础。 其次,Odoo开发手册介绍了如何创建和扩展Odoo模块。它详细讲解了模块的结构和目录,以及模块的核心文件和配置。开发人员可以学习如何在Odoo创建自定义模块,添加新的字段和关系,定义动作和菜单,并且如何通过继承来改变和扩展现有的模块。 此外,Odoo开发手册还介绍了如何进行Odoo界面的定制化开发开发人员可以了解到如何使用Odoo的视图语言和QWeb模板来构建用户界面,包括添加和修改表单、列表、树和搜索视图等。开发人员还可以学习如何使用JavaScript和CSS来定制界面样式和行为。 最后,Odoo开发手册还提供了一些高级主题的讨论,如安全性、日志和调试、多语言支持、应用程序集成等。通过学习这些主题,开发人员可以更加全面地理解Odoo开发和部署过程,并且可以解决一些常见的问题和挑战。 综上所述,Odoo开发手册是一本帮助开发人员理解和掌握Odoo定制开发的重要材料。通过阅读和学习手册,开发人员可以更好地利用Odoo的功能和特性,为企业定制开发出更加适合自身需求的软件系统。 ### 回答3: Odoo是一款开源的企业资源计划(Enterprise Resource Planning,简称ERP)软件,旨在帮助企业集成和管理其各个业务流程。由于Odoo在全球范围内广泛使用,因此有许多对Odoo进行开发的手册。 在Odoo开发手册,将详细介绍如何使用Odoo进行开发。手册通常会从基础知识开始,介绍Odoo的架构和核心概念。这些概念包括模型(Model)、视图(View)、控制器(Controller)等。手册还会介绍如何配置Odoo开发环境以及创建和管理Odoo应用程序的步骤。 在手册还会介绍Odoo模块开发方式。模块Odoo独立的功能单元,可以通过模块的方式进行开发和集成。手册会详细介绍如何创建和维护模块,如何使用Odoo模块开发方式来扩展和定制现有的功能。 此外,手册还会介绍如何使用Odoo的特性和功能,如报表生成、工作流管理、权限控制等。手册会提供代码示例和详细步骤,以帮助开发者理解和应用这些功能。 除了基本的开发知识和技巧,手册还可能会提供一些高级技术主题,如Web开发、数据库管理、性能优化等。这些主题有助于开发者更好地利用Odoo的强大功能,实现更高效、可扩展和稳定的应用程序。 总之,Odoo开发手册是一个非常有价值的资源,它帮助开发者理解Odoo的核心概念和开发方式,以及如何利用Odoo的功能和特性来构建强大的企业应用程序。无论是初学者还是有一定经验的开发者,都可以从手册获得宝贵的指导和启发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值