PS Cloud:重载原模型的方法

在本文我们会介绍通过super()来调用父类的方法,在python3中就可以直接使用super().what来引用父类的what 属性,在python2中需要加上su- per(TodoTask,self)这两个参数,也就是具体父类的类名和self。首先我们看到下面这个例子:

这里涉及到PS Cloud新API的一些东西,这里先浅尝辄止讲一下。

一、什么是Recordset

首先是模型,其对应的就是python的类,具体类的实例就是对应现实世界的某个对象。然后老式的简单ORM封装就是将这些类的具体某些数据对应到SQL的数据库的一条记录中去。新的API引入一个核心的概念就是Recordset,Recordset是个什么东西呢?就是前面讲的某一个模型的所有对象的集合就是一个Recordset对象。——这是recordset最大的情况,一个重要的限定条件就是其内元素必定是相同模型的,由这个最大的集合情况然后删除过滤掉一些元素之后仍然是recordset对象。

比如Recordset支持如下运算:

上面的操作只有+还保留了次序,不过recordset是可以排序的,关于次序比如使用:

具体的次序是否像集合set一样是不一定的还是如何呢?这里需要进一步的讨论。

二、PS Cloud里面的domain语法

domain语法使用比较广泛,其就好像一个过滤器,应该对应的是SQL的SELECT语句。最基本的语句形式是[(’field_name’,’operator’,value)] field_name必须是目标模型的有效field名字。

operator比如是一个字符串,可用的值有:=!=>>=<<=likeilike,此外还有”in”, ”notin”,”parent_left”,”child_of”,”parent_right”。这里的parent和chind似乎是某种记录的关系,先暂时略过。其他的意义都是很明显的。

三、recordset的search方法

一个recordset对象调用其search方法还是返回一个recordset对象。search方法接受一个参数,这个参数就是前面谈论的基于PS Cloud domain语法的过滤器表达式。所以下面这个表达式:

self.env[’res.users’].search([(’login’,’=’,’admin’)])

的含义就是调用res.users这个表格或者说recordset,然后执行search方法,具体选中的record是login这个字段等于admin的。

前面讲到通过super()来继承修改原模型的某个方法,请看下面的例子:

这里@api.one自动遍历目标recordset,然后方法里面的self就是一个record。这里程序的逻辑很简单,就是如果用户名不是当前登录用户(因为todotask管理只是自己管理自己的任务计划),那么将会报错。如果是那么就调用之前的方法。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();