odoo model注意事项-2(个人总结,不喜勿喷)

本文详细介绍了Odoo模块开发过程中的关键步骤,包括在__manifest__.py中配置依赖和视图,Many2many字段的管理和操作规则,执行SQL语句的方法,以及如何正确地继承和重写父类方法。同时,还提供了对常见数据库操作和字段约束检查的实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

11.在__mainfest__.py中,要在depends中写上所依赖的模块名,在data中写上用到视图文件的名字,比如在views中有work.xml文件,在data中写上'views/work.xml'

12.对于Many2many字段,如果对于这个字段里的某个属性进行修改,升级以后,如果数据库里没有更新,则需要对这个模块进行卸载重装

13,对于Many2many字段的后台处理规则:

# (0, 0, { values }) 创建从表记录

例如:self.write({'order_line':[(0,0,{'name':'tfs','age':26})]})

# (1, ID, { values }) 更新从表记录

# (2, ID)删除从表中记录

# (3, ID)删除从表链接,但不删除从表记录

# (4, ID)链接一个现有的id记录

# (5,) 删除所有的链接,但不删除从表记录

# (6, 0, [IDs])替换,把原有的链接删掉,然后重新获取设置新的链接

比如给many2many链接一个model,首先将其放在一个list中,如[(4,model.id)],然后赋给这个many2many字段就可以了:

如果是创建,data[A] = [(4,model.id)],B.create(data)

如果是赋值,list = [(4,model.id)],B.A=list,A代表many2many字段

14.执行sql语句,目前是self.env.cr.execute(sql)

15.继承父类方法,在方法内第一行写super(子类类名,self),后面写具体的执行逻辑,意味着对父类方法的拓展,在执行完父类方法后,再执行子类中对父类方法的拓展

16.def create(self, vals)重写创建方法,vals以字典形式存储一些信息,

line = super(workcenter_productivity_sub, self).create(vals) 调用父类create方法

17.self.env['mrp.workorder']获取类mrp.workorder的实例对象,相当于workorder=mrp.workorder()

18.browse方法:浏览对象及其关联对象。从数据库中读取指定的记录,并生成对象返回。和read等方法不同,本方法不是返回简单的记录,而是返回对象。返回的对象可以直接使用"."存取对象的字段和方法,形如"object.name_of_the_field",关联字段(many2one等),也可以通过关联字段直接访问“相邻”对象。如:

class mrp.workcenter.productivity(model.Model):

self.env['mrp.workorder'].browse(vals.get('workorder_id')).workcenter_id.id

使用类mrp.workorder调用browse方法获取数据库中本model类(指mrp.workcenter.productivity)中的字段为workorder_id的对象,然后再用这个对象用‘ . ’来获取我们想要的字段id

19.继承父类方法,对其进行拓展之后,查看一下继承的父类方法是否有返回值,或者说有某个方法调用父类接收返回值,其实主要就看父类是否有返回值,如果有的话,继承父类的子方法如果只是对其中的数据库进行修改,而不是修改返回值的数据格式,那么只需要在前面写的super方法前,用一个对象来接收super的返回值,意味着接收父类执行完的返回值,然后在子方法最后返回这个值,如res = super(MrpProduction_sub,self)._workorders_create(bom, bom_data),否则会出现特殊的错误,TypeError: Mixing apples and oranges: mrp.workorder().concat(None)

20.self.operation_ids.ids代表获取当前对象关联表的所有id

21.对于@api.constrains,def _check(self),应该要先遍历self,防止先有数据,再安装模块,然后走到这个方法时,self是多个;还有就是子表内有这个方法,在父表内直接创建多条子表明细,那么self也是多个,不遍历的话会报错的,其实对于后面这种情况也可以通过在子表内写create方法,不做任何处理,然后就是相当于创建的时候,每创建一条就走一次constrains方法,self就是单个。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值