序言:时间是我们最宝贵的财富,珍惜手上的每个时分
本文章将以odoo中的仓库表(stock.warehouse)作为例子,为大家讲述odoo的【原型继承】
目录
1.添加Depends模块
2.字段
2.2增加字段
2.1继承修改原字段
3.方法
3.1增加方法
3.2继承方法
3.2.1直接覆盖
3.2.2继承覆盖
4.修改视图
使用类继承即可对原始模型进行拓展,最常见的继承形态。继承方法前我们需要为新模块的__manifest__.py 添加 denepds 的模块。 否则将会出现找不到模型的报错。
# -*- coding: utf-8 -*-
{
‘’‘
'depends': ['stock'],
’‘’
}
我是如何确定 需要 depsnds 【stock】模块呢?
最原始的方法为:全局搜索关键字 “stock.warehouse”
这个范围太广了!还是用高效一些的方法把:
激活开发者模式,选择模型-》搜索stock.warehouse,查看字段: 应用程序
该应用程序,即为模块的文件夹名称,在该范围内搜索,可以更加精确。
小tips:odoo原生的模型命名都是有规律的,我们以模型 第一个 . 之前的字符为文件夹参照去寻找一般都能找到答案,例如,stock.location 、 account.move,他们定义的模块就分别是stock和account
现需要给仓库(stock.warehouse)增加 仓库类型字段,那么代码如下:
通过 关键字 inherit 指定 继承的模型为:stock.warehouse(仓库模型),随后定义字段即可。
class StockWarehouse(models.Model):
_inherit = 'stock.warehouse'
stock_type = fields.Char(string='仓库类型')
增加字段后,现在又希望修改原始字段的属性,比如:希望将【缩写】改为【仓库代码】,
那么直接复制原有的字段定义(Char),只传 string参数,即可完成覆盖。
class StockWarehouse(models.Model):
_inherit = 'stock.warehouse'
code = fields.Char(string='仓库编码')
当然这只是一个示例,更改 string还有其他方式:
1)视图继承修改
2)翻译修改
在此就不细说。
假设现在还需要通过按钮方法控制仓库类型是【自营仓】还是【第三方仓】
那么只需要正常新建方法即可。
def change_stock_type(self,type):
self.write({'stock_type':type})
def change_stock_type_self(self):
self.change_stock_type('自营仓')
def change_stock_type_custom(self):
self.change_stock_type('第三方仓')
此方法十分霸道,通过编写与原模块一样的方法名,完全覆盖原方法内容。
如非特殊情况,否则不要使用。
特别是原生方法,可能会存在多次继承关系,强行覆盖会导致其他逻辑问题。
#现方法,强行修改逻辑
def change_stock_type_self(self):
self.change_stock_type('自营仓')
#新增逻辑
self.do_something()
常见方法,在保持原有方法的基础上,续写功能,可保证原有逻辑干净顺畅。
def change_stock_type_self(self):
#原逻辑
super(StockWaarehouse, self).change_stock_type()
#新逻辑
self.do_something()
激活开发者模式后,在需要修改的视图上点击 【debug】小按钮,查看外部ID
随便
stock.warehouse
在__manifest__.py中 声明引用
'data': [
'views/stock_warehouse_views.xml'
],
通过以上步骤,即可完成完整的仓库继承拓展
odoo开发部署实施.
wx号: _ro_cd