Odoo12 ORM API ☞ Fields

2023-12-20 04:48
文章标签 api orm fields odoo12

本文主要是介绍Odoo12 ORM API ☞ Fields,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Fields


Basic fields(基础字段)

class odoo.fields.Field(string=, **kwargs)

字段描述符包含字段定义并管理记录上相应字段的访问和分配。实例化字段时可能会提供以下属性:

Parameters
  string – 用户所看到的标签;如果没有设置,ORM获取类中的字段名称大写作为默认名称
  help – 用户所看到的字段提示
  readonly – 字段是否为只读(布尔值,默认为False)
  required – 字段值是否必输(布尔值,默认为False)
  index – 是否在数据库中为改字段创建索引(布尔值,默认为False)
  default – 字段的默认值,可以是静态值,也可以是根据记录集返回值的函数;使用default = None可以放弃该字段的默认值
  states – 将状态值映射到UI属性 - 值对列表的字典;属性可能为:‘readonly’,‘required’,‘invisible’。**注意:任何基于状态的条件都要求在客户端界面上提供state字段值。**通常通过将其包括的相关视图中来完成,如果与最终用户不相关,则可能使其不可见。
  groups – 逗号分隔的组xml id列表(字符串),字段限制了仅对给定组的用户可以访问
  copy(bool) – 复制记录时是否应复制字段值(默认值:正常字段为True,one2many为False,计算字段为False,包括属性字段和相关字段)
  oldname (string) – 该字段的先前名称,以便ORM可以在迁移时自动重命名

Computed fields

计算字段其值是计算的,而不是简单地从数据库中读取。下面给出了特定于计算字段的属性。要定义这样的字段,只需为属性 compute 提供一个值。

 Parameters
  compute – 计算字段的方法的名称
  inverse – 反转字段的方法的名称(可选)
  search – 在字段上实现搜索的方法的名称(可选)
  store – 字段是否存储在数据库中(布尔值,默认情况下在计算字段上为False)
  compute_sudo – 是否应将该字段重新计算为超级用户以绕过访问权限(布尔值,默认为False)

compute, inverse and search 都是模型方法,它们的签名如下例所示:

upper = fields.Char(compute='_compute_upper',inverse='_inverse_upper',search='_search_upper')@api.depends('name')
def _compute_upper(self):for rec in self:rec.upper = rec.name.upper() if rec.name else Falsedef _inverse_upper(self):for rec in self:rec.name = rec.upper.lower() if rec.upper else Falsedef _search_upper(self, operator, value):if operator == 'like':operator = 'ilike'return [('name', operator, value)]

compute 方法必须在调用的记录集的所有记录上分配字段。必须在compute方法上应用装饰器 odoo.api.depends() 来指定字段依赖性;这些依赖关系用于确定何时重新计算字段;重新计算是自动的,并保证缓存/数据库的一致性。请注意,相同的方法可用于多个字段,您只需分配方法中的所有给定字段;对于所有这些字段,将调用该方法一次。
默认情况下,计算字段不会存储到数据库中,而是即时计算。添加属性store = True会将字段的值存储在数据库中。存储字段的优点是在该字段上搜索由数据库本身完成。缺点是在必须重新计算字段时需要数据库更新。
正如其名称所示,反向方法执行计算方法的反转:调用的记录具有字段的值,您必须对字段依赖性应用必要的更改,以便计算给出预期值。请注意,默认情况下,只读取没有反向方法的计算字段。
在对模型进行实际搜索之前处理域时会调用搜索方法。它必须返回一个等同于条件的domain:field operator value.


Related fields

通过遵循一系列关系字段并读取到达模型上的字段来给出相关字段的值。要遍历的完整字段序列由属性指定

Parameters
  related – sequence of field names

如果未重新定义某些字段属性,则会自动从源字段复制这些属性:string,help,readonly,required(仅当序列中的所有字段都需要时)***groups, digits, size, translate, sanitize, selection, comodel_name, domain, context.***, 从源字段复制所有无语义属性。默认情况下,相关字段的值不会存储到数据库中。添加属性store = True以使其存储,就像计算字段一样。修改其依赖项后,将自动重新计算相关字段。

Company-dependent fields
以前称为“属性”字段,对这些领域的属性取​​决于公司。换句话说,属于不同公司的用户可能会在给定记录上看到该字段的不同值。

Parameters
  company_dependent – whether the field is company-dependent (boolean)

Incremental definition
字段在模型类上定义为类属性。
如果继承模型(参见 model),还可以通过在子类上重新定义具有相同名称和相同类型的字段来扩展字段定义。
例如,下面的第二个类只在字段 state 上添加工具提示:

class First(models.Model):_name = 'foo'state = fields.Selection([...], required=True)class Second(models.Model):_inherit = 'foo'state = fields.Selection(help="Blah blah blah")
class odoo.fields.Char(string=, **kwargs)

Bases: odoo.fields._String
基本字符串字段,可以是长度限制的,通常在客户端中显示为单行字符串。

Parameters
  size (int) – 为该字段存储的值的最大长度
  trim (bool) – 说明值是否被修剪(默认情况下为True)。请注意,修剪操作仅由Web客户端应用。
  translate – 启用字段值的转换;使用translate = True将字段值作为一个整体进行翻译;translate也可以是可调用的,使得translate(callback,value)通过使用回调(term)来检索术语的翻译来转换值。

class odoo.fields.Boolean(string=, **kwargs)

Bases: odoo.fields.Field(参见上述基础字段)

class odoo.fields.Integer(string=, **kwargs)

Bases: odoo.fields.Field (参见上述基础字段)

class odoo.fields.Float(string=, digits=, **kwargs)

Bases: odoo.fields.Field (参见上述基础字段)
精度数字由属性给出

Parameters:
  digits – a pair (total, decimal), or a function taking a database cursor and returning a pair (total, decimal)

class odoo.fields.Text(string=, **kwargs)

Bases: odoo.fields._String
与Char非常相似,但用于较长的内容,没有大小,通常显示为多行文本框。

Parameters:
  translate – 启用字段值的转换;使用translate = True将字段值作为一个整体进行翻译;translate也可以是可调用的,使得translate(callback,value)通过使用回调(term)来检索术语的翻译来转换值。

class odoo.fields.Selection(selection=, string=, **kwargs)

Bases: odoo.fields.Field (参见上述基础字段)

Parameters:
  selection – 指定此字段的可能值。它以对的列表(值,字符串)或模型方法或方法名称的形式给出。
  selection_add – 在继承字段的情况下提供选择的扩展。它是键值对的列表(值,字符串)。

除相关字段或字段扩展外,属性选择是必需的。、

class odoo.fields.Html(string=, **kwargs)[source]

Bases: odoo.fields._String


Date and Datetime fields(日期和日期时间字段)

日期和日期时间是任何类型的业务应用程序中非常重要的字段,它们被广泛用于许多流行的Odoo应用程序,例如物流或会计,它们的滥用可能会产生看不见但又严重的错误,
此摘录旨在为Odoo开发人员提供避免滥用这些领域所需的知识。

将赋值给日期/日期时间字段时,以下选项有效:

  • 日期字段的正确服务器格式(YYYY-MM-DD)的字符串,日期时间字段的(YYYY-MM-DD HH:MM:SS)。
  • 日期或日期时间对象。
  • False or None。
    如果不确定分配给Date / Datetime对象的值的类型,最好的做法是将值传递给to_date()或to_datetime(),它们将尝试将值分别转换为date或datetime对象,然后可以将其分配给相关值。

Example:
要解析来自外部来源的日期/日期时间:
fields.Date.to_date(self._context.get(‘date_from’))

Date / Datetime comparison best practices(日期时间比较):

  • 日期字段只能与日期对象进行比较。
  • 日期时间字段只能与datetime对象进行比较。

Warning!
表示日期和日期时间的字符串可以相互比较,但结果可能不是预期的结果,因为日期时间字符串将始终大于日期字符串,因此强烈建议不要这样做。

具有日期和日期时间的常见操作(例如添加,减法或获取期间的开始/结束)通过datedatetime对象来实现。当需要比较时引入 odoo.tools.date_utils. 模块。

class odoo.fields.Date(string=, **kwargs)

Bases: odoo.fields.Field (参见上述基础字段)

static add(*args, **kwargs)
返回值的总和和relativedelta。

Parameters:
  value – 初始日期或日期时间。
  args – 参数args直接传递给relativedelta。
  kwargs – 关键字args直接传递给relativedelta。
Returns:
  结果日期/日期时间。

static context_today(timestamp=None)
以适合日期字段的格式返回客户端时区中显示的当前日期。此方法可用于计算默认值。

Parameters:
  record – 根据记录集,从中获取时区。
  timestamp (datetime) – 要使用的可选日期时间值而不是当前日期和时间(必须是日期时间,不能在时区之间转换常规日期)。
Return type:
  日期

static end_of(granularity)
日期或日期时间结束时间段。

Parameters:
  value – 初始日期或日期时间。
  granularity – 字符串中的句点类型,可以是年,季,月,周,日或小时。
Returns
  与指定期间的开始对应的日期/日期时间对象。

static start_of(granularity)
日期或日期时间开始时间段。

Parameters:
  value – 初始日期或日期时间。
  granularity – 字符串中的句点类型,可以是年,季,月,周,日或小时。
Returns
  与指定期间的开始对应的日期/日期时间对象。

static subtract(*args, **kwargs)
返回value 和relativedelta之间的时间差。

Parameters:
  value – 初始日期或日期时间。
  args – 参数args直接传递给relativedelta。
  kwargs – 关键字args直接传递给relativedelta。
Returns:
  the resulting date/datetime.

static to_date()
尝试将value转换为日期对象。

此函数可以接受不同类型的参数:

  • 一个假的对象,在这种情况下将返回None 。
  • 表示日期或日期时间的字符串。
  • 日期对象,在这种情况下,对象将按原样返回。
  • 日期时间对象,在这种情况下,它将被转换为日期对象,并且所有特定于日期时间的信息都将丢失(HMS,TZ,…)。

Parameters:
  value – 要转换的价值。
Returns:
  表示值的对象。
Return type
  日期对象

static to_string()
将日期或日期时间对象转换为字符串。

Parameters:
  value – 要转换的价值。
Returns:
  表示服务器日期格式值的字符串,如果value是datetime类型,则小时,分钟,秒,tzinfo将被截断。
Return type
  字符串

static today()
以ORM预期的格式返回当天。此函数可用于计算默认值。

class odoo.fields.Datetime(string=, **kwargs)

Bases: odoo.fields.Field

static add(*args, **kwargs)
返回值的总和和relativedelta。

Parameters:
  value – 初始日期或日期时间。
  args – 参数args直接传递给relativedelta。
  kwargs – 关键字args直接传递给relativedelta。
Returns:
  结果日期/日期时间。

static context_timestamp(timestamp)
返回转换为客户端时区的给定时间戳。 此方法不适合用作默认初始值设定项,因为datetime字段在客户端显示时自动转换。对于默认值,应使用fields.Datetime.now()。

Parameters:
  record – 根据记录集,从中获取时区。
  timestamp (datetime) – 要转换为客户端时区日期时间值(以UTC表示)。
Return type:
  日期时间对象
Returns
  时间戳在上下文时区中转换为时区感知日期时间。

static end_of(granularity)
日期或日期时间结束时间段。

Parameters:
  value – 初始日期或日期时间。
  granularity – 字符串中的句点类型,可以是年,季,月,周,日或小时。
Returns
  与指定期间的开始对应的日期/日期时间对象。

static now()
以ORM预期的格式返回当前日期和时间。此函数可用于计算默认值。

static start_of(granularity)
日期或日期时间开始时间段。

Parameters:
  value – 初始日期或日期时间。
  granularity – 字符串中的句点类型,可以是年,季,月,周,日或小时。
Returns
  与指定期间的开始对应的日期/日期时间对象。

static subtract(*args, **kwargs)
返回value 和relativedelta之间的时间差。

Parameters:
  value – 初始日期或日期时间。
  args – 参数args直接传递给relativedelta。
  kwargs – 关键字args直接传递给relativedelta。
Returns:
  the resulting date/datetime.

static to_datetime()
ORM 将 value转换为日期时间值。

此函数可以接受不同类型的参数:

  • 一个假的对象,在这种情况下将返回None 。
  • 表示日期或日期时间的字符串。
  • 日期对象,在这种情况下,对象将按原样返回。
  • 日期时间对象,在这种情况下,它将被转换为日期对象,并且所有特定于日期时间的信息都将丢失(HMS,TZ,…)。

Parameters:
  value – 要转换的价值。
Returns:
  表示值的对象。
Return type
  日期时间对象

static to_string()
将datetime或date对象转换为字符串。

Parameters:
  value – 待转换的值。
Returns:
  表示服务器日期时间格式的值的字符串,如果值的类型为date,则时间部分为(00:00:00)。
Return type:
  字符串

static today()
返回当天日期,时间为午夜(00:00:00)。


Relational fields(关系字段)

class odoo.fields.Many2one(comodel_name=, string=, **kwargs)

Bases: odoo.fields._Relational

这样一个字段的值是大小为0(无记录)或1(单个记录)的记录集。

Parameters
  comodel_name – 关联模型的名称(字符串)
  domain – 在客户端(domain或字符串)上设置候选值的可选域
  context – 处理该字段时在客户端使用的可选上下文(字典)
  ondelete – 删除关联记录时该怎么办;可选的值是: ‘set null’, ‘restrict’, ‘cascade’
  auto_join – 是否在搜索该字段时生成JOINs(布尔值,默认为False)
  delegate – 将其设置为True可以从当前模型访问目标模型的字段(对应于_inherits)

除相关字段或字段扩展名外,属性comodel_name是必需的。

class odoo.fields.One2many(comodel_name=, inverse_name=, string=, **kwargs)

Bases: odoo.fields._RelationalMulti

One2Many字段:此字段的值是comodel_name中所有记录的记录集,使得字段inverse_name指向当前记录。

Parameters:
  comodel_name – 关联模型的名称(字符串)
  inverse_name – comodel_name中指向Many2one字段的名称(字符串)
  domain – 在客户端(domain或字符串)上设置候选值的可选域
  context – 处理该字段时在客户端使用的可选上下文(字典)
  auto_join – 是否在搜索该字段时生成JOINs(布尔值,默认为False)
  limit – 读取记录时使用的可选限制(整数)

除相关字段或字段扩展名外,comodel_name和inverse_name属性是必需的。

class odoo.fields.Many2many(comodel_name=, relation=, column1=, column2=, string=, **kwargs)

Bases: odoo.fields._RelationalMulti

many2Mnay:字段的值是记录集。

Parameters:
  comodel_name – 关联模型的名称(字符串)

除相关字段或字段扩展名外,属性comodel_name是必需的。

Parameters:
  relation – 存储数据库中关系的表的可选名称(字符串)
  column1 – 关联表中字段名称(字符串)
  column2 – 关联表中字段名称(字符串)

属性relation、column1和column2是可选的。如果没有给出,名称将自动从model名称生成,前提是model_name和comodel_name不同!

Parameters:
  domain – 在客户端(domain或字符串)上设置候选值的可选域
  context – 处理该字段时在客户端使用的可选上下文(字典)
  limit – 读取记录时使用的可选限制(整数)

class odoo.fields.Reference(selection=, string=, **kwargs)

Bases: odoo.fields.Selection

这篇关于Odoo12 ORM API ☞ Fields的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/514807

相关文章

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等。通过DLL可以使用户很方便地调用C、C++、C#、VB等编程语言写的程序以及windows自带的大

如何更优雅地对接第三方API

如何更优雅地对接第三方API 本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/third 我们在日常开发过程中,有不少场景会对接第三方的API,例如第三方账号登录,第三方服务等等。第三方服务会提供API或者SDK,我依稀记得早些年Maven还没那么广泛使用,通常要对接第三方

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma

Restful API 原理以及实现

先说说API 再说啥是RESRFUL API之前,咱先说说啥是API吧。API大家应该都知道吧,简称接口嘛。随着现在移动互联网的火爆,手机软件,也就是APP几乎快爆棚了。几乎任何一个网站或者应用都会出一款iOS或者Android APP,相比网页版的体验,APP确实各方面性能要好很多。 那么现在问题来了。比如QQ空间网站,如果我想获取一个用户发的说说列表。 QQ空间网站里面需要这个功能。

京东物流查询|开发者调用API接口实现

快递聚合查询的优势 1、高效整合多种快递信息。2、实时动态更新。3、自动化管理流程。 聚合国内外1500家快递公司的物流信息查询服务,使用API接口查询京东物流的便捷步骤,首先选择专业的数据平台的快递API接口:物流快递查询API接口-单号查询API - 探数数据 以下示例是参考的示例代码: import requestsurl = "http://api.tanshuapi.com/a

Go 在orm中使用反射

作为静态语言,golang 稍显笨拙,还好 go 的标准包reflect(反射)包弥补了这点不足,它提供了一系列强大的 API,能够根据执行过程中对象的类型来改变程序控制流。本文将通过设计并实现一个简易的 mysql orm 来学习它,要求读者了解mysql基本知识,并且跟我一样至少已经接触 golang 两到三个月。 orm 这个概念相信同学们都非常熟悉,尤其是写过rails的同学,对acti

WordPress开发中常用的工具或api文档

http://php.net/ http://httpd.apache.org/ https://wordpress.org/ https://cn.wordpress.org/ https://core.svn.wordpress.org/ zh-cn:开发者文档: https://codex.wordpress.org/zh-cn:%E5%BC%80%E5%8F%91%E8%80%

Java后端微服务架构下的API限流策略:Guava RateLimiter

Java后端微服务架构下的API限流策略:Guava RateLimiter 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在微服务架构中,API限流是保护服务不受过度使用和拒绝服务攻击的重要手段。Guava RateLimiter是Google开源的Java库中的一个组件,提供了简单易用的限流功能。 API限流概述 API限流通过控制请求的速率来防止

Docker远程连接和Docker Remote Api

在Docker生态系统中一共有3种API:Registry API、Docker Hub API、Docker Remote API 这三种API都是RESTful风格的。这里Remote API是通过程序与Docker进行集成和交互的核心内容。 Docker Remote API是由Docker守护进程提供的。默认情况下,Docker守护进程会绑定到一个所在宿主机的套接字:unix:///v

基于MinerU的PDF解析API

基于MinerU的PDF解析API - MinerU的GPU镜像构建- 基于FastAPI的PDF解析接口 支持一键启动,已经打包到镜像中,自带模型权重,支持GPU推理加速,GPU速度相比CPU每页解析要快几十倍不等 主要功能 删除页眉、页脚、脚注、页码等元素,保持语义连贯对多栏输出符合人类阅读顺序的文本保留原文档的结构,包括标题、段落、列表等提取图像、图片标题、表格、表格标题自动识别