本文主要是介绍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!
表示日期和日期时间的字符串可以相互比较,但结果可能不是预期的结果,因为日期时间字符串将始终大于日期字符串,因此强烈建议不要这样做。
具有日期和日期时间的常见操作(例如添加,减法或获取期间的开始/结束)通过date和datetime对象来实现。当需要比较时引入 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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!