Odoo中model中使用_inherit / _inherits属性简介
Odoo中model中使用_inherit / _inherits属性简介
以odoo12环境为例,生产厂家模型为例进行解释说明。
1.正常使用 “_inherit” 是用于对模型进行继承修改,常见于如下定义:
class AccountMove(models.Model):_inherit = 'account.move'stock_move_id = fields.Many2one('stock.move', string='Stock Move')
其中使用 “_inherit” 属性表示对原有模型的继承修改,这其中不包含 “_name” 属性。
查看数据库字段会发现对原有表增加新继承新定义的字段。
2.同时使用 “_inherit” , “_name” 或者 同时使用 “_inherits” , “_name” ,
2.1 先看 “_inherit” , “_name” 同时存在情况,如下边代码定义:
class StockManufacturer(models.Model):_name = 'stock.manufacturer'_description = 'Stock Manufacturer'_order = 'id asc'# 名称name = fields.Char('Manufacturer Name', required=True, index=True)# 编码number = fields.Char('Manufacturer Number', index=True, copy=False)# 类型: 生产厂家、代理商manufacturer_type = fields.Selection([('manufacturer', 'Manufacturer'), ('agent', 'Agent')],string='Manufacturer Type', required=True)# 有效active = fields.Boolean('Active', default=True)# 说明instructions = fields.Char('Manufacturer Instructions')# 唯一性约束:检验生产厂家编码是否唯一_sql_constraints = [('manufacturer_unique', 'unique (number)', _("Manufacturer Number already exists !")),]class StockManufacturerSon(models.Model):_name = 'stock.manufacturer.son'_inherit = 'stock.manufacturer'_description = 'Stock Manufacturer Son'_order = 'id asc'son = fields.Char('Son')daughter = fields.Char('Daughter')
可以看到同时使用 “_inherit” , “_name” 属性,这个时候会生成两张表,分别为stock_manufacture、stock_manufacture_son。其中stock_manufacture_son会继承stock_manufacture中的字段,并增加自己模型中定义的字段。这种方式就类似与从stock_manufacture复制字段出来加上继承新增加字段,组成一张新表。
注意这个时候操作stock_manufacture_son是不会影响stock_manufacture表中的数据的。
数据库表截图如下:
stock_manufacture
stock_manufacture_son
2.2 先看 “_inherits” , “_name” 同时存在情况,如下边代码定义:
class StockManufacturerSon(models.Model):_name = 'stock.manufacturer.grandson'_inherits = {'stock.manufacturer.son': 'grand_id'}_description = 'Stock Manufacturer Grand Son'_order = 'id asc'grandson = fields.Char('Son')granddaughter = fields.Char('Daughter')
这里注意 {‘stock.manufacturer.son’: ‘grand_id’},其中**'grand_id’字段作为stock_manufacturer_grandson表与stock_manufacturer_son的关联字段。这里的 “_inherits” 也类似与将两个模型字段结合形成新表的感觉,但是不同的是stock_manufacturer_grandson表不会存储stock_manufacturer_son表的字段,而是在odoo模型对象中可以直接通过对象点"."** 的方式直接访问stock.manufacturer.son对象的数据,其中stock.manufacturer.grandson对象直接操作stock.manufacturer.son对象数据,是会影响stock.manufacturer.son的对象数据的。
数据库表如下:
stock_manufacturer_grandson
Odoo中model中使用_inherit / _inherits属性简介相关推荐
- 前端js获取SpringMvc后台model中传值
也许你迷茫,但是我想说,在你迷茫的同时,保持本心,过好今天就好. 使用 SpringBoot +SpringMVC +thymeleaf 组合实现的功能,期望在 thymeleaf 中的html中的j ...
- SpringMVC js如何获取后台model中的属性值
SpringMVC js如何获取后台model中的属性值 companylist 如何获取 var companylist="${companylist}"; 希望对你有所帮助 个 ...
- 在Asp.Net MVC中实现RequiredIf标签对Model中的属性进行验证
在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现RequiredIf标签对Model中的属性进行验证 具体场景为:某一属性是否允许为null的验证,要根据另 ...
- inherits在java中是什么属性_inherits属性
今天在错误列表里报了这样的一个错误: 情确保此代码文件中定义的类与"inherits"属性匹配,并且该类扩展的基类(例如Page或Control)是正确的. 呃.......,当时 ...
- django中model模型
python manage.py dumpdata blog # 导出blog数据 python manage.py loaddata blog_dump.json # 导入数据 m ...
- Django中Model继承的三种方式
Django中Model继承的三种方式 Django中Model的继承有三种: 1.抽象继承 2.多表继承 3.proxy model(代理model) 1.抽象继承 第一种抽象继承,创建一个通用父类 ...
- python在子类中添加新的属性_pycharm实现在子类中添加一个父类没有的属性
我就废话不多说了,还是直接看代码吧! class Car(): """一次模拟汽车的简单尝试""" def __init__(self, m ...
- MVC中Model BLL层Model模型互转
MVC中Model BLL层Model模型互转 一. 模型通常可以做2种:充血模型和失血模型,一般做法是模型就是模型,不具备方法来操作,只具有属性,这种叫做失血模型(可能不准确):具备对模型一定的简单 ...
- java中遍历实体类,获取属性名和属性值
方式一(实体类): //java中遍历实体类,获取属性名和属性值public static void testReflect(Object model) throws Exception{for (F ...
最新文章
- Sea.js学习4——Sea.js的配置
- Matlab 区域扫描,30+行Matlab代码实现文件扫描
- Win10 使用minikube搭建k8s集群 并运行hello-minikube实例
- 第8天:我用AI算法造了一些“网红”
- Fragment专辑(三):Fragment的添加(add)和替换(replace)的不同
- mybatis高级(3)_延迟加载_深度延迟_一级缓存_二级缓存
- 单体 soa 微服务 区别_每日一读-从单体到微服务,这些年架构的演变
- 使用Apache commons-pool2实现高效的FTPClient连接池的方法
- html不建议翻译,[译] 可用但最不常见的 HTML5 标签
- Hero引擎47个各种问题解答
- UWB超宽带定位技术
- java的日期格式化
- Neusoft机房改善计划
- 企业宣传片解说词的写法指导。
- RK3568 Android12 移除电池图标和设置选项
- 每年10万被动收入目标分解
- 垃圾回收之如何判断对象可以回收、四种引用以及实际案例操作
- 系统设计中的集群隔离和机房隔离
- 【操作系统基础】操作系统核心概述
- C语言指针(一)——什么是指针及指针的定义