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属性简介相关推荐

  1. 前端js获取SpringMvc后台model中传值

    也许你迷茫,但是我想说,在你迷茫的同时,保持本心,过好今天就好. 使用 SpringBoot +SpringMVC +thymeleaf 组合实现的功能,期望在 thymeleaf 中的html中的j ...

  2. SpringMVC js如何获取后台model中的属性值

    SpringMVC js如何获取后台model中的属性值 companylist 如何获取 var companylist="${companylist}"; 希望对你有所帮助 个 ...

  3. 在Asp.Net MVC中实现RequiredIf标签对Model中的属性进行验证

    在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现RequiredIf标签对Model中的属性进行验证 具体场景为:某一属性是否允许为null的验证,要根据另 ...

  4. inherits在java中是什么属性_inherits属性

    今天在错误列表里报了这样的一个错误: 情确保此代码文件中定义的类与"inherits"属性匹配,并且该类扩展的基类(例如Page或Control)是正确的. 呃.......,当时 ...

  5. django中model模型

    python manage.py dumpdata blog       # 导出blog数据 python manage.py loaddata blog_dump.json   # 导入数据  m ...

  6. Django中Model继承的三种方式

    Django中Model继承的三种方式 Django中Model的继承有三种: 1.抽象继承 2.多表继承 3.proxy model(代理model) 1.抽象继承 第一种抽象继承,创建一个通用父类 ...

  7. python在子类中添加新的属性_pycharm实现在子类中添加一个父类没有的属性

    我就废话不多说了,还是直接看代码吧! class Car(): """一次模拟汽车的简单尝试""" def __init__(self, m ...

  8. MVC中Model BLL层Model模型互转

    MVC中Model BLL层Model模型互转 一. 模型通常可以做2种:充血模型和失血模型,一般做法是模型就是模型,不具备方法来操作,只具有属性,这种叫做失血模型(可能不准确):具备对模型一定的简单 ...

  9. java中遍历实体类,获取属性名和属性值

    方式一(实体类): //java中遍历实体类,获取属性名和属性值public static void testReflect(Object model) throws Exception{for (F ...

最新文章

  1. Sea.js学习4——Sea.js的配置
  2. Matlab 区域扫描,30+行Matlab代码实现文件扫描
  3. Win10 使用minikube搭建k8s集群 并运行hello-minikube实例
  4. 第8天:我用AI算法造了一些“网红”
  5. Fragment专辑(三):Fragment的添加(add)和替换(replace)的不同
  6. mybatis高级(3)_延迟加载_深度延迟_一级缓存_二级缓存
  7. 单体 soa 微服务 区别_每日一读-从单体到微服务,这些年架构的演变
  8. 使用Apache commons-pool2实现高效的FTPClient连接池的方法
  9. html不建议翻译,[译] 可用但最不常见的 HTML5 标签
  10. Hero引擎47个各种问题解答
  11. UWB超宽带定位技术
  12. java的日期格式化
  13. Neusoft机房改善计划
  14. 企业宣传片解说词的写法指导。
  15. RK3568 Android12 移除电池图标和设置选项
  16. 每年10万被动收入目标分解
  17. 垃圾回收之如何判断对象可以回收、四种引用以及实际案例操作
  18. 系统设计中的集群隔离和机房隔离
  19. 【操作系统基础】操作系统核心概述
  20. C语言指针(一)——什么是指针及指针的定义

热门文章

  1. Gitee Pages 部署
  2. ubuntu 追逐鼠标指针的小猫~Oneko
  3. PL/0编译器设计扩展
  4. sql 查询一段时间区间内的值
  5. CSS3动画demmo和Vue轮播图
  6. 用do-while语句实现,1/1+1/2+1/3+....1/n>vlaue
  7. Windows编程的mfc编程浅述
  8. 计算机毕业设计Java鲜花在线销售系统(源码+系统+mysql数据库+Lw文档)
  9. 数据挖掘工程师的基本职责。
  10. robotframework 教程