转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826222.html

==========模型层面==========

一:_table_exist

检查该模型对于的数据库表是否存在,是则返回1,否则返回0.

@api.model_cr
def _table_exist(self):
pass

==========模型记录层面==========

二:create(self,vals)

记录的创建函数,一般情况下,是根据视图传过来的dict对象,生成模型记录。

我们可以重写create方法:1)获取vals参数,从中提前数据进行校验、替换;

2)调用super(类,self).create(new_vals) 把新的dict作为参数执行记录创建。

三:write(self,vals)

记录的修改函数,很少重写,参数也是dict。

四:read(self,fields)

记录的查看函数,参数是查看哪些字段,默认是全字段,很少重写。

五:unlink(self)

记录的删除函数,参数是当前数据记录集。一般重写该函数,校验记录的状态等,限制某些记录不能被删除。

六:_search(self, args, offset=0, limit=None, order=None, count=False, access_rights_uid=None)

模型记录的搜索函数,定义了该模型的记录被关联搜索、搜索视图搜索时的条数、排序字段、总数、检索权限等。

七:name_get()

name_get()函数定义了该模型的记录在被关联、搜索时,所显示出来的名字,默认是使用name字段的值。

如果我们想自定义该模型的记录显示的名称,例如:使用 编码+name字段 显示的复合名称,则可以重写name_get()函数:

    @api.multi
@api.depends('用于拼接名称字段', 'name')
def name_get(self):
"""
名称显示格式。
"""
new_name = self.用于拼接名称字段 + self.name
return [(self.id,new_name)]

八:name_search()

name_get()定义了记录如何显示,那么name_search()则定义了记录如何被查找。

name_search()定义了模型记录在被关联、被搜索时,通过输入的内容进行模糊查找的逻辑。

默认情况下,是通过查找记录的 name  字段值是否与输入内容类似进行比对查找,我们可以改写模型的name_search()函数,把更多的字段加入比对中去。

    @api.model
def name_search(self, name, args=None, operator='ilike', limit=查找条数):
"""
名称模糊搜索。
"""
args = args or []
domain = []
domain.append([(更多检索条件)])
return super(类名, self).name_search(name, domain + args, operator=operator, limit=limit)

或直接查找,返回所得记录集的name_get:

@api.model
def name_search(self,name='',args=None,operator='ilike',limit=100):
args = args or []
domain = []
if name:
domain = ['|',('name',operator,name),('其他比对字段',operator,name)]
pos = self.search(domain + args,limit=limit) //使用扩展后的条件进行查找
return pos.name_get() //把查找结果的name返回

九:default_get()

default_get(fields) 函数用于初始化记录的默认值,对于模型的某些字段如果需要设置默认值,可以重写模型的default_get()函数达到目的。

例如:从表单中携带上下文信息跳转到向导、跳转到一个模型的新建表单视图等,可以在跳转时往context传递数据,然后在向导模型、被跳转创建的模型中重写default_get方法,从context中提前信息,进行字段默认值的初始化。

    @api.model
def default_get(self, default_fields):
result = super(类名, self).default_get(default_fields)
context_data = self.env.context.get('key')
//根据context_data进行相关数据查询、处理操作
result.update({'字段': 默认值}) //更改记录的字段默认值
return result

十:name_create(name)

相当于只传递name字段值,调用create方法创建一条新记录。

十一:fields_get

字段查询函数,一般不重写:以数据字典的形式返回字段的定义,通过继承得来的字段也会在其中,string/help/selection属性会自动被翻译

fields_get([fields],[attributes]):
fields参数是字段列表、为空或不传返回所有字段
attributes 可指定字段的属性、为空或不传时返回全部的

==========视图信息层面==========

十二:fields_view_get

视图查询函数,一般不重写:返回指定视图的具体组成如:字段,所关联的模型,视图结构。

fields_view_get():
view_id 视图的id或None
view_type 当view_id参数为空时指定视图类型如form,tree等
toolbar 参数为true时将上下文动作包含在内

十二:get_formview_action

表单视图获取函数,可以重写该函数,使模型加载某个特定的form视图,甚至可以在加载时传递context值,控制视图的行为。

十三:load_views(views,options)

视图加载函数,可以重写该函数,在加载视图时传递context值,控制视图行为。

Odoo模型的内置方法(可按需重写)的更多相关文章

  1. 铁乐学python_day24_面向对象进阶1_内置方法

    铁乐学python_day24_面向对象进阶1_内置方法 题外话1: 学习方法[wwwh] what where why how 是什么,用在哪里,为什么,怎么用 学习到一个新知识点的时候,多问问上面 ...

  2. UVM RAL模型和内置seq

    转载:UVM RAL模型:用法和应用_寄存器 (sohu.com) 在系统设计中通常会面临两大挑战:缩小技术节点的规模和上市时间(TTM,Time to Market).为了适应激烈的市场竞争,大多数 ...

  3. python黑魔法 -- 内置方法使用

    很多pythonic的代码都会用到内置方法,根据自己的经验,罗列一下自己知道的内置方法. __getitem__ __setitem__ __delitem__ 这三个方法是字典类的内置方法,分别对应 ...

  4. python常用数据类型内置方法介绍

    熟练掌握python常用数据类型内置方法是每个初学者必须具备的内功. 下面介绍了python常用的集中数据类型及其方法,点开源代码,其中对主要方法都进行了中文注释. 一.整型 a = 100 a.xx ...

  5. 7.python字符串-内置方法分析

    上篇对python中的字符串内置方法进行了列举和简单说明,但这些方法太多,逐一背下效率实在太低,下面我来对这些方法按照其功能进行总结: 1.字母大小写相关(中文无效) 1.1 S.upper() -& ...

  6. 6.python字符串-内置方法列举

    所谓内置方法,就是凡是字符串都能用的方法,这个方法在创建字符串的类中,下面是总结: 首先,我们要学习一个获取帮助的内置函数 help(对象) ,对象可以是一个我们创建出来的,也可以是创建对象的那个类, ...

  7. python 字典内置方法get应用

    python字典内置方法get应用,如果我们需要获取字典值的话,我们有两种方法,一个是通过dict['key'],另外一个就是dict.get()方法. 今天给大家分享的就是字典的get()方法. 这 ...

  8. 内置方法+lambda是pythonic的利器

    python可以写的非常简洁,通过使用内置的map,reduce,filter,lambda方法,非常具有文艺范. 举个例子,例如 def fromIpToNum(ipAddr):    return ...

  9. 字符串:各种奇葩的内置方法 - 零基础入门学习Python014

    字符串:各种奇葩的内置方法 让编程改变世界 Change the world by program 字符串:各种奇葩的内置方法 或许现在又回过头来谈字符串,有些朋友可能会觉得没必要,也有些朋友会觉得不 ...

随机推荐

  1. 分布式文件系统HDFS

    利用Shell命令与HDFS进行交互 以”./bin/dfs dfs”开头的Shell命令方式 1.目录操作 在HDFS中为hadoop用户创建一个用户目录(hadoop用户) 启动hadoop 创建 ...

  2. LOAM笔记

    CSDN有篇结合paper分析代码的博文,下面是我对paper的理解: 1. 综述 整个LOAM本质就是一个激光里程计,没有闭环检测,也就没有图优化框架在里面,该算法把SLAM问题分为两个算法同时运行 ...

  3. k8s删除pod一直处于terminating状态

    我这里的pod是与nfs有关,nfs挂载有问题导致pod有问题,执行完删除命令以后看到pod一直处于terminating的状态. 这种情况下可以使用强制删除命令: kubectl delete po ...

  4. c# 数据请求方式提供

    营销平台数据请求介绍 项目介绍: 前端使用 WPF,采用MVVM模式  后端数据库采用的sqlite 依靠本地化运行   后期可能会采用WebApi   因为WPF都是自学的 所以 代码方面写的可能不 ...

  5. [转帖]springboot2.0配置连接池(hikari、druid)

    springboot2.0配置连接池(hikari.druid) 原文链接:https://www.cnblogs.com/blog5277/p/10660689.html 原文作者:博客园--曲高终 ...

  6. springmvc接收参数为日期类型

    用单个Date类型接收日期类型时,会出现报错,加上initBinder的方法 意思是将所有传入的参数都通过此方法,如果过是日期通过日期格式化器进行格式化 如果是接收类型为对象内的属性为Date类型时 ...

  7. Golang读取并修改非主流配置文件

    今天工作中碰到的问题,要求修改此配置文件,没看出来是什么格式,用了下面的思路: mysql { # If any of the files below are set, TLS encryption ...

  8. K8S学习笔记之K8S日志搜集实战

    详细参考这篇文章,几乎覆盖了了K8S的各种日志搜集方案 https://juejin.im/post/5b6eaef96fb9a04fa25a0d37#heading-8

  9. JVM故障分析系列之四:jstack生成的Thread Dump日志线程状态

    JVM故障分析系列之四:jstack生成的Thread Dump日志线程状态  2017年10月25日  Jet Ma  JavaPlatform JVM故障分析系列系列文章 JVM故障分析系列之一: ...

  10. 基于python的图像傅里叶处理

    import numpy as npimport matplotlib.pyplot as plt x = np.linspace(-10, 10, 1000)a = np.cos(x)b = a + ...