一:self是什么

目前新版的Odoo中使用到的self,是对  游标cr、用户ID、模型、上下文、记录集、缓存  的封装。

我们可以通过 self.XX 获取到这些封装的东西,比如:self.cr、self.uid。

二:通过直接设置属性来改变数据库中字段值

我们在查出某模型的记录后,可以通过  record.XX = value  来直接修改记录的字段内容。

同样,在重写模型的write方法中,也可以通过 self.XX = value 来指定新增记录中某字段的值。

这里需要注意两点:

1:修改查出来的记录字段值来改变数据库内容,是通过改变缓存中的值出发数据库写记录来达到的。

2:重写write方法时,在write方法中每调用一次 self.XX = value 语句,都会触发数据库写操作,因此一般采用:

for rec in self:
rec.XX = XX

的写法。

三:环境

1:操作缓存

环境储存了模型的缓存记录集,因此我们可以通过环境来获取、增加、修改、删除记录,而触发数据库更改,从而达到操作数据库的目的。

例如:新增一条记录

self.env['模型'].create(vals)

2:改变用户权限

我们可以通过self.sudo()获得超级权限,从而确保我们的操作能够进行。

self.env[‘model'].sudo().create(vals)

3:访问当前用户

self.env.user

4:获取XML的ID

self.env.ref('external id')

5:更新缓存,触发数据库操作

self.env.invalidate_all()

四:self常用接口

1:普通查询:返回记录集,后续通过修改记录值来触发数据库修改

self.search(domain) //从当前模型的self中查询
self.env['model'].search(domain) // 获取某个model的环境,查询其中的记录集

2:只读查询:返回列表,只能提取内容,不能触发数据库修改

self.search_read([],['要查询的字段'])

3:统计数量:返回符合条件的记录条数

self.search_count(domain)

4:浏览:通过一系列id值,返回对应的记录集

self.browse([id])

5:删除

self.unlink(domain)

五:NEW ids

Odoo在创建一个新记录时,会使用models.ids虚拟一个记录id。

可以通过

if is instance(record.id,models.NewId):

来判断。

  六、数据库查询

 import psycopg2

 class XXXXX(models.Model):
........ @api.multi
def OOOO(self):
db = psycopg2.connect("dbname=test4 user=postgres")#查找名叫 test4 的数据库 postgres 是数据库的超级用户名称
vals = db.cursor()
vals.execute("SELECT sales,prices,sale_date FROM run_chart")#执行sql语句查询数据
tables = vals.fetchall()#返回查询结果 或者
sql = "select *from 表名"
self.env.cr.execute(sql) #执行SQL语句
dicts = self.env.cr.dictfetchall() #获取SQL的查询结果
												

odoo中self的使用的更多相关文章

  1. 利用Python的三元表达式解决Odoo中工资条中城镇、农村保险的问题

    Python中没有像C#中有三元表达式 A?B:C 但在python中可以通过 A if condition else B 的方式来达到同样的效果. 例如 : 1 if True else 0 输出 ...

  2. (19)odoo中的javascript

    -----------更新日期15:17 2016-02-16 星期二-----------* 用到的js库   我们可以打开 addons/web/views/webclient_template. ...

  3. Odoo 中使用 celery 实现高性能异步任务队列

    详见:http://www.oejia.net/blog/2018/07/09/odoo_task_queue.html 概述 在 odoo 中可以用自带的cron实现异步任务,这个cron基于多线程 ...

  4. odoo中def init(self):

    # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. f ...

  5. odoo中的ORM操作

    ORM方法简介 OpenERP的关键组件, ORM是一个完整的对象关系映射层,是开发人员不必编写基本的SQL管道. 业务对象被声明继承字models.Models的python类. 这让业务对象在OR ...

  6. Odoo中连接mysql数据库

    how to integrate Odoo with MySQL - Stack Overflowhttps://stackoverflow.com/questions/31959919/how-to ...

  7. Odoo中使用的数据模型

    Odoo中使用的部分表如下, res_users 用户 res_groups 用户组(角色) res_lang 语言 res_partner 供应商/客户/联系人 res_font 字体 res_co ...

  8. Odoo中的甘特图

    转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9296922.html  甘特图 用图表来衡量实际与预期生产记录之间关系的方法中所使用的图表,亦称甘特进度表或条 ...

  9. Odoo中的模型

        转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9280164.html    [Odoo中,一切皆模型,连视图都是模型.Odoo将各种数据,如:权限数据 ...

随机推荐

  1. Linux安装NET CORE

    Linux安装.NET CORE 1.Add the dotnet apt-get feed 为了在Ubuntu或Linux Mint上安装.NET,您需要首先设置托管所需软件包的apt-get fe ...

  2. C#版Websocket实例

    C#版Websocket实例   Demo地址:www.awbeci.xyz websocket有java.nodejs.python,Php等等版本,我使用的是C#版本,服务器端是Fleck,git ...

  3. Android Glide 源码分析系列(待完成)

    参考:https://jekton.github.io/2018/06/08/glide-disk-cache/ 参考:https://jekton.github.io/2018/06/20/glid ...

  4. Android触摸事件(一)-TouchEventHelper

    文件夹 文件夹 概述 关于更新 2016-08-31 2016-06-20 关于单点触摸事件singleTouch 单击的两种方式 关于双击事件 双击事件的检測逻辑 双击事件触发的时机 关于多点触摸事 ...

  5. 远程调试Android手机上网页的记录

    1.手机需要开启USB调试模式: 2.电脑和手机上都要安装最新的Chrome浏览器: 3.手机连接电脑,会出现下载安装驱动的提示并安装成功(并不是所有的手机都会这么顺利,比如我的魅族就无法安装驱动,公 ...

  6. centos6 利用外部的smpt服务器计划任务发送邮件

    centos可通过修改配置文件以使用外部SMTP服务器,达到不使用sendmail而用外部的smtp服务器发送邮件的目的, 操作如下: 一.安装mailx与sendmail # yum -y inst ...

  7. 你可能不知道的IDEA高级调试技巧

    一.条件断点 循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值. 参考上图,在断点的位置,右击断点旁边的小红点,会出来一个界面,在Condition这里填入断点条件即可 ...

  8. Replication基础(六) 复制中的三个线程(IO/SQL/Dump)

    Reference:  https://blog.csdn.net/sun_ashe/article/details/82181811?utm_source=blogxgwz1 简介在MySQL复制技 ...

  9. 通过灰度线性映射增强图像对比度实现PS中的色阶

    通过灰度线性映射增强图像对比度 Halcon中如何通过灰度线性映射增强图片对比度呢?不急,我先讲点其他的. 如果你用过Photoshop,那么想必对增强图像的对比度很熟悉.在Photoshop中,我们 ...

  10. SAP 生产订单变更管理 OCM Order Changement Management

    SAP OCM Order Changement Management  一.目的 订单变更管理系统是当我们的订单(生产订单.计划订单.采购订单)已经存在的时候,其物料主数据或销售数据有变更时,我们可 ...