(08)odoo继承机制
* 全局的引用
所有的的模型定义外,都在注册中心注册了,我们可以用全局变量来引用这些模型
self.env[mode name] 比如得到合作伙伴这个模型 self.evn['res.partner']
* 三种常用继承 (在model中操作)
_inherit 没重定义_name 这样数据库不会新建对象表,用被继承的表
_inherit 重定义_name 这样数据库会创建新的对象表存储
_inherits 是复合继承,有模型对象,有字段对象
示例:
class MyModelExtended(Model):
_inherit = 'a.model' # direct heritage
_inherit = ['a.model, 'a.other.model'] # direct heritage
_inherits = {'a.model': 'field_name'} # polymorphic heritage
* 增加field
from openerp import models,fields,api
class TodoTask(models.Model)
_inherit = 'todo.task'
user_id = fields.Many2one('res.users',string='Response')
date_deadline = fields.Date('Deadline')
* 修改已有的field
name = fields.Char(help="can I help you")
这样额外增加了help帮助信息
* 重载原模型的方法
super(TodoTask,self) 两个参数 一个是具体父类的类名和 self
@api.multi
def do_clear_done(self):
domain = [(’is_done’, ’=’, True),
’|’, (’user_id’, ’=’, ’self.env.uid’),
(’user_id’,’=’,False)]
done_recs = self.search(domain)
done_recs.write({’active’:False})
return True
@api.one
def do_toggle_done(self):
if self.user_id != self.env.user:
raise Exception(’Only the responsible can do this!’)
else:
return super(TodoTask, self).do_toggle_done()
要某该记录的 user_id 等于当前用户的 id self.env.uid ,要某 user_id 值为 False
@api.multi 告诉我们这个函数里面的self是一个recordset
@api.one 自动遍历目标 recordset,然后方法里面的 self 就是一个 record。
* recordset操作
record in recset1 # 包含
record not in recset1 # 不包含
recset1 + recset2 # 两个相加分前后顺序
recset1 | recset2 # 两个并集
recset1 & recset2 # 两个交集
recset1 - recset2 # difference 两个差集
recset.copy() # copy the recordset (not a deep copy) 浅拷贝
如:
for record in recordset:
print(record)
* domain语法
最基本的语句 [('field_name','operator',value)]
field_name 必须目标模型的有效field名字
operator 有 = != > >= < <= like ilike
not in, parent_left, child_of, parent_right
value 必须和前面的 field_name类型相同的某个值
基本的语句 可以用逻辑运算符连接,默认的符号是 &
[(’field_name1’, ’operator’, value), ’!’,
(’field_name2’, ’operator’, value), ’|’,
(’field_name3’, ’operator’, value),(’field_name4’, ’operator’, value)]
! 只作用于后面一个元素 , &和| 作用于后面两个元素
上面解析为:
1 表达式 and 2表达式否 and 3表达式 或 4表达式
* recordset 的search方法
返回得是一个 recordset
self.env[model_name].search(domain表达式)
* 视图的继承
<?xml version=”1.0”?>
<openerp>
<data>
<record id=”view_form_todo_task_inherited” model=”ir.ui.view”>
<field name=”name”>Todo Task form – User extension</field>
<field name=”model”>todo.task</field>
<field name=”inherit_id” ref=”todo_app.view_form_todo_task”/>
<field name=”arch” type=”xml”>
<field name=”name” position=”after”>
<field name=”user_id” />
</field>
<field name=”is_done” position=”before”>
<field name=”date_deadline” />
</field>
<field name=”name” position=”attributes”>
<attribute name=”string”>I have to...</attribute>
</field>
</field>
</record>
</data>
</openerp>
<field name=”inherit_id” ref=”todo_app.view_form_todo_task”/> 定义继承
定位 path语法 //field[@name]=''
<field name=”name” position=”after”>
<field name=”user_id” />
</field>
插入点有 inside 插入到定位标签之内
before 插入到定位标签之前
after 插入到定位标签之后
replace 替换定位标签,若是空内容,就是删除原标签元素
原视图属性更改
<field name=”name” position=”attributes”>
<attribute name=”string”>I am going to</attribute>
</field>
<field name=”active” position=”attributes”>
<attribute name=”invisible”>1</attribute>
</field>
隐藏标签,这个常用,不建议前面说的删除标签
* 多态继承
_inherit 可以继承多个模型
_name='todo.task'
_inherit = ['todo.task','mail.thread']
* 修改其它数据文件
不能像视图文件下的arch结构下的xml 可以用 XPath表达式
# 删除记录
<delete model=”ir.rule” search=”[(’id’, ’=’,
ref(’todo_app.todo_task_user_rule’))]” />
# 更新数据
<record id=”x” model=”y”>
<record id=”todo_task_per_user_rule” model=”ir.rule”>
<field name=”name”>ToDo Tasks only for owner</field>
<field name=”model_id” ref=”model_todo_task”/>
<field name=”groups” eval=”[(4, ref(’base.group_user’))]”/>
<field name=”domain_force”>
[’|’,(’user_id’,’in’, [user.id,False]),
(’message_follower_ids’,’in’,[user.partner_id.id])]
</field>
</record>
(08)odoo继承机制的更多相关文章
- Javascript 构造函数原型继承机制
我们先聊聊Js的历史,1994年Netscape公司发布了Navigator浏览器0.9班.这是历史上第一个比较成熟的网络浏览器.轰动一时.但是,这个版本的浏览器只能用来浏览,不具备交互功能,最主要的 ...
- javascript继承机制的设计思想(ryf)
我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...
- javascript 之 prototype继承机制
理解Javascript语言的继承机制 javascript没有"子类"和"父类"的概念,也没有"类"(class)和"实例&qu ...
- Javascript类继承-机制-代码Demo【原创】
最近看到<Javascript设计模式>,对js模拟的”继承方式“有了更深一步的了解,虽然之前也总是用到prototype.new ,但只是知其然不知所以然,现在将类继承的方法整理如下,暂 ...
- 创建对象的最好方式&最好的继承机制(代码实例)
/* 创建对象的最好方式:混合的构造函数/原型方式, *用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法) */ function People(sname){ this.nam ...
- js最好的继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法。
js最好的继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法. function ClassA(sColor) { this.color = sColor; } Class ...
- 【JavaScript】重温Javascript继承机制
上段时间,团队内部有过好几次给力的分享,这里对西风师傅分享的继承机制稍作整理一下,适当加了些口语化的描述,留作备案. 一.讲个故事吧 澄清在先,Java和Javascript是雷锋和雷峰塔的关系.Ja ...
- Unity3d - 初学篇 Event Functions 的 继承 机制
我们知道Start() Update() 等之类的 事件函数 在Unity 主线程中是依次调用的.至于调用的顺序可以查手册. 由此继承机制也会发生一些改变. 测试一: public class MyT ...
- Java面向对象程序设计--与C++对比说明:系列3(Java 继承机制)
继承(inheritance)背后的核心思想是: bonus = b; } } Java没有像C++那样提供多继承机制,但提供了接口机制,在后面我们将详细探究接口机制的实现 ...
随机推荐
- js跨域及解决方案
本文出自:http://www.cnblogs.com/oneword/archive/2012/12/03/2799443.html 1.什么是跨域 我们经常会在页面上使用ajax请求访问其他服务器 ...
- ALV详解:Function ALV(二)
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- hdu 1075 (map)
http://acm.hdu.edu.cn/showproblem.php?pid=1075 What Are You Talking About Time Limit: 10000/5000 MS ...
- “System.Data.OracleClient.OracleConnection”已过时
处理办法: 在oracle 安装目录下 找到 Oracle.DataAccess.dll添加引用,然后 using Oracle.DataAccess.Client;其他的都不用动,即可.连接字符串中 ...
- UpdatePanel的简单用法(转)
微软AJAX虽然是过时的玩意,但是得维护公司之前的老项目,转载看看. 局部更新是ajax技术的最基本,也是最重要的用法,今天大概把asp.net ajax中的局部更新控件 updatepanel的用法 ...
- 装了maven插件的eclipse中M2_REPO无法编辑、删除(转)
今天用了新版本的eclipse,用maven在命令行生成了一个普通项目.导入eclipse之后发现本地仓库的路径不正确. 显示的为 user.path/.m2/repository 但是我的仓库早已经 ...
- iOS - Swift Swift 语言新特性
1.Swift 2.0 带来哪些新变化 常规变化: 1.OS X 10.11.iOS 9 和 watchOS 2 SDK 采纳了一些 Objective-C 的特性用来提高 Swift 的编程体验, ...
- Windows_CMD_临时环境变量
1. 以 path 为例: 1.1.查看: set path 1.2.添加: set path=%path%;"要添加的路径" 附录:下面贴上一些常用的环境变量及作用 %ALLUS ...
- Div里面载入另一个页面的实现(取代框架)(AJax)(转)
随着框架越来越不火了,HTML5就不对框架支持了,iframe也只有url了,Div就担当了此大任 DIV+CSS在页面部局确实也很让人满意,使用也更方便 今天突然遇到一个问题,那就是需要导入另一个页 ...
- LVS--NAT模型配置
环境准备 管理IP地址 角色 备注 192.168.11.131 调度器(Director) 对外提供VIP服务的地址为192.168.1.114 192.168.11.132 RS1 网关为192 ...