Odoo Documentation : Fields
Fields
Basic fields
class openerp.fields.Field(string=None, **kwargs)
The field descriptor contains the field definition, and manages accesses and assignments of the corresponding field on records. The following attributes may be provided when instanciating a field:
- string -- the label of the field seen by users (string); if not set, the ORM takes the field name in the class (capitalized).
- help -- the tooltip of the field seen by users (string)
- readonly -- whether the field is readonly (boolean, by default
False
) - required -- whether the value of the field is required (boolean, by default
False
) - index -- whether the field is indexed in database (boolean, by default
False
) - default -- the default value for the field; this is either a static value, or a function taking a recordset and returning a value
- states -- a dictionary mapping state values to lists of UI attribute-value pairs; possible attributes are: 'readonly', 'required', 'invisible'. Note: Any state-based condition requires the
state
field value to be available on the client-side UI. This is typically done by including it in the relevant views, possibly made invisible if not relevant for the end-user. - groups -- comma-separated list of group xml ids (string); this restricts the field access to the users of the given groups only
- copy (
bool
) -- whether the field value should be copied when the record is duplicated (default:True
for normal fields,False
forone2many
and computed fields, including property fields and related fields) - oldname (
string
) -- the previous name of this field, so that ORM can rename it automatically at migration
Computed fields
One can define a field whose value is computed instead of simply being read from the database. The attributes that are specific to computed fields are given below. To define such a field, simply provide a value for the attribute compute
.
- compute -- name of a method that computes the field
- inverse -- name of a method that inverses the field (optional)
- search -- name of a method that implement search on the field (optional)
- store -- whether the field is stored in database (boolean, by default
False
on computed fields) - compute_sudo -- whether the field should be recomputed as superuser to bypass access rights (boolean, by default
False
)
The methods given for compute
, inverse
and search
are model methods. Their signature is shown in the following example:
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 False def _inverse_upper(self):
for rec in self:
rec.name = rec.upper.lower() if rec.upper else False def _search_upper(self, operator, value):
if operator == 'like':
operator = 'ilike'
return [('name', operator, value)]
The compute method has to assign the field on all records of the invoked recordset. The decorator openerp.api.depends()
must be applied on the compute method to specify the field dependencies; those dependencies are used to determine when to recompute the field; recomputation is automatic and guarantees cache/database consistency. Note that the same method can be used for several fields, you simply have to assign all the given fields in the method; the method will be invoked once for all those fields.
By default, a computed field is not stored to the database, and is computed on-the-fly. Adding the attribute store=True
will store the field's values in the database. The advantage of a stored field is that searching on that field is done by the database itself. The disadvantage is that it requires database updates when the field must be recomputed.
The inverse method, as its name says, does the inverse of the compute method: the invoked records have a value for the field, and you must apply the necessary changes on the field dependencies such that the computation gives the expected value. Note that a computed field without an inverse method is readonly by default.
The search method is invoked when processing domains before doing an actual search on the model. It must return a domain equivalent to the condition: field operator value
.
Related fields
The value of a related field is given by following a sequence of relational fields and reading a field on the reached model. The complete sequence of fields to traverse is specified by the attribute
Some field attributes are automatically copied from the source field if they are not redefined: string
, help
, readonly
, required
(only if all fields in the sequence are required), groups
, digits
, size
, translate
, sanitize
, selection
, comodel_name
, domain
, context
. All semantic-free attributes are copied from the source field.
By default, the values of related fields are not stored to the database. Add the attribute store=True
to make it stored, just like computed fields. Related fields are automatically recomputed when their dependencies are modified.
Company-dependent fields
Formerly known as 'property' fields, the value of those fields depends on the company. In other words, users that belong to different companies may see different values for the field on a given record.
Incremental definition
A field is defined as class attribute on a model class. If the model is extended (see Model
), one can also extend the field definition by redefining a field with the same name and same type on the subclass. In that case, the attributes of the field are taken from the parent class and overridden by the ones given in subclasses.
For instance, the second class below only adds a tooltip on the field 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 openerp.fields.Char(string=None, **kwargs)
Bases: openerp.fields._String
Basic string field, can be length-limited, usually displayed as a single-line string in clients
class openerp.fields.Boolean(string=None, **kwargs)
Bases: openerp.fields.Field
class openerp.fields.Integer(string=None, **kwargs)
Bases: openerp.fields.Field
class openerp.fields.Float(string=None, digits=None, **kwargs)
Bases: openerp.fields.Field
The precision digits are given by the attribute
class openerp.fields.Text(string=None, **kwargs)
Bases: openerp.fields._String
Very similar to Char
but used for longer contents, does not have a size and usually displayed as a multiline text box.
class openerp.fields.Selection(selection=None, string=None, **kwargs)
Bases: openerp.fields.Field
- selection -- specifies the possible values for this field. It is given as either a list of pairs (
value
,string
), or a model method, or a method name. - selection_add -- provides an extension of the selection in the case of an overridden field. It is a list of pairs (
value
,string
).
The attribute selection
is mandatory except in the case of related fields or field extensions.
class openerp.fields.Html(string=None, **kwargs)
Bases: openerp.fields._String
class openerp.fields.Date(string=None, **kwargs)
Bases: openerp.fields.Field
static context_today(record, timestamp=None)
Return the current date as seen in the client's timezone in a format fit for date fields. This method may be used to compute default values.
datetime
) -- optional datetime value to use instead of the current date and time (must be a datetime, regular dates can't be converted between timezones.)static from_string(value)
Convert an ORM value
into a date
value.
static to_string(value)
Convert a date
value into the format expected by the ORM.
static today(*args)
Return the current day in the format expected by the ORM. This function may be used to compute default values.
class openerp.fields.Datetime(string=None, **kwargs)
Bases: openerp.fields.Field
static context_timestamp(record, timestamp)
Returns the given timestamp converted to the client's timezone. This method is not meant for use as a _defaults initializer, because datetime fields are automatically converted upon display on client side. For _defaults you fields.datetime.now()
should be used instead.
datetime
) -- naive datetime value (expressed in UTC) to be converted to the client timezonestatic from_string(value)
Convert an ORM value
into a datetime
value.
static now(*args)
Return the current day and time in the format expected by the ORM. This function may be used to compute default values.
static to_string(value)
Convert a datetime
value into the format expected by the ORM.
Relational fields
class openerp.fields.Many2one(comodel_name=None, string=None, **kwargs)
Bases: openerp.fields._Relational
The value of such a field is a recordset of size 0 (no record) or 1 (a single record).
- comodel_name -- name of the target model (string)
- domain -- an optional domain to set on candidate values on the client side (domain or string)
- context -- an optional context to use on the client side when handling that field (dictionary)
- ondelete -- what to do when the referred record is deleted; possible values are:
'set null'
,'restrict'
,'cascade'
- auto_join -- whether JOINs are generated upon search through that field (boolean, by default
False
) - delegate -- set it to
True
to make fields of the target model accessible from the current model (corresponds to_inherits
)
The attribute comodel_name
is mandatory except in the case of related fields or field extensions.
class openerp.fields.One2many(comodel_name=None, inverse_name=None, string=None, **kwargs)
Bases: openerp.fields._RelationalMulti
One2many field; the value of such a field is the recordset of all the records in comodel_name
such that the field inverse_name
is equal to the current record.
- comodel_name -- name of the target model (string)
- inverse_name -- name of the inverse
Many2one
field incomodel_name
(string) - domain -- an optional domain to set on candidate values on the client side (domain or string)
- context -- an optional context to use on the client side when handling that field (dictionary)
- auto_join -- whether JOINs are generated upon search through that field (boolean, by default
False
) - limit -- optional limit to use upon read (integer)
The attributes comodel_name
and inverse_name
are mandatory except in the case of related fields or field extensions.
class openerp.fields.Many2many(comodel_name=None, relation=None, column1=None, column2=None, string=None, **kwargs)
Bases: openerp.fields._RelationalMulti
Many2many field; the value of such a field is the recordset.
The attribute comodel_name
is mandatory except in the case of related fields or field extensions.
- relation -- optional name of the table that stores the relation in the database (string)
- column1 -- optional name of the column referring to "these" records in the table
relation
(string) - column2 -- optional name of the column referring to "those" records in the table
relation
(string)
The attributes relation
, column1
and column2
are optional. If not given, names are automatically generated from model names, provided model_name
and comodel_name
are different!
- domain -- an optional domain to set on candidate values on the client side (domain or string)
- context -- an optional context to use on the client side when handling that field (dictionary)
- limit -- optional limit to use upon read (integer)
class openerp.fields.Reference(selection=None, string=None, **kwargs)
Bases: openerp.fields.Selection
Odoo Documentation : Fields的更多相关文章
- Odoo Documentation : Recordsets
Other recordset operations Recordsets are iterable(可迭代的) so the usual Python tools are available for ...
- Odoo Documentation : Environment
Environment The Environment stores various contextual data(上下文数据 ) used by the ORM: the database cur ...
- Defining custom settings in Odoo
Unfortunately Odoo documentation doesn’t seem to include any information about adding new configurat ...
- odoo配置界面设置字段默认值
转自国外牛人博客:http://ludwiktrammer.github.io/odoo/custom-settings-odoo.html Defining custom settings in O ...
- Odoo 12 开发手册指南(八)—— 业务逻辑 – 业务流程的支持
在前面的文章中,我们学习了模型层.如何创建应用数据结构以及如何使用 ORM API 来存储查看数据.本文中我们将利用前面所学的模型和记录集知识实现应用中常用的业务逻辑模式. 本文的主要内容有: 以文件 ...
- odoo 11 实现多个字段对应一个查询参数的查询
在整理英语单词开发模块的过程中,有这样一个需求,就是我在查询界面里输入一个查询的值A,这个A可能是下面的任何一个值 1.一个英语单词 2.汉语文字 3.一个英语单词的部分 这里有两张表:engli ...
- odoo 有哪些文档资源
// openbook [覆盖 openerp 7 及之前版本] https://doc.odoo.com/ // 最新的 odoo documentation user[覆盖 odoo 9] ...
- 第十三章 Odoo 12开发之创建网站前端功能
Odoo 起初是一个后台系统,但很快就有了前端界面的需求.早期基于后台界面的门户界面不够灵活并且对移动端不友好.为解决这一问题,Odoo 引入了新的网站功能,为系统添加了 CMS(Content Ma ...
- 第八章 Odoo 12开发之业务逻辑 - 业务流程的支持
在前面的文章中,我们学习了模型层.如何创建应用数据结构以及如何使用 ORM API 来存储查看数据.本文中我们将利用前面所学的模型和记录集知识实现应用中常用的业务逻辑模式. 本文的主要内容有: 以文件 ...
随机推荐
- CSS——精灵技术
精灵技术产生的背景 图所示为网页的请求原理图,当用户访问一个网站时,需要向服务器发送请求,网页上的每张图像都要经过一次请求才能展现给用户. 然而,一个网页中往往会应用很多小的背景图像作为修饰,当网页中 ...
- 阿里云代码管理平台 Teambition Codeup(行云)亮相,为企业代码安全护航
2019杭州云栖大会企业协作与研发效能专场,企业协同平台Teambition负责人齐俊元正式发布阿里云自研的代码管理平台Teambition Codeup(行云),Codeup是一款企业级代码管理产品 ...
- spring整合shiro框架
上一篇文章已经对shiro框架做了一定的介绍,这篇文章讲述使用spring整合shiro框架,实现用户认证已经权限控制 1.搭建环境 这里不在赘述spring环境的搭建,可以简单的搭建一个ssm框架, ...
- VI/VIM 无法使用系统剪贴板(clipboard)
来自: http://www.bubuko.com/infodetail-469867.html vim 系统剪贴板 "+y 复制到系统剪切板 "+p 把系统粘贴板里的内容粘贴到v ...
- 一个小村庄的烦恼(netty-nio)
背景:一座大山有个小村庄,住着几百户人家,隔着大山那边几十里山路,有个小集市,家家户户经常翻山越岭买日用品,苦不堪言(同步阻塞,单线程,每户人家一个线程,去赶集了,今天也干不了别的活). 后来村长看着 ...
- 02-python 学习第二天
今天学习了以下几个方面的内容,虽然部分内容不能理解,跟着老师写出了代码. 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 程序练习1:购物车程序 请闭眼写出以下程序. 程序: ...
- view架构
一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...
- <每日一题>题目3:编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件
def log(func): def inner(*args,**kwargs): with open('log',mode='a',encoding='utf-8') as f: #以追加的方式打开 ...
- C 遍历目录及其子目录
遍历某一目录,获取该目录下所有文件路径的数组 #include <iostream> #include <dirent.h> #include <vector> v ...
- Pyinstaller打包Web项目
最近需要用python打包一个单页面网页demo,于是准备用python包pyinstaller来打包程序.网上搜索了一下,大部分教程都是打包非web项目,这里分享一下打包简单网页demo的过程. 系 ...