赞
踩
models.py
from odoo import models, fields, api class test_module(models.Model): # 模型名称,类的唯一标识,其他类可以通过此字段引用本类 _name = 'test.module' # 数据库中会自动将.转换为_ # 多模型类的描述,提高查询的友好性,为用户查看该模型的标题 _description = 'test_module.test_module' # 设置该模型展示时默认的排序字段 _order = 'create_date desc' # 按照创建时间倒序 # odoo默认使用name字段,作为数据记录的描述,可以用该字段来指定其他字段,也可以使用 name_get() 方法做为描述。 _rec_name = '' # 模型在后台存储的表名,在默认情况下odoo会将 _name 中的 . 替换为 _ 作为表名,通过该字 段可以指定。 _table = '' # 用于继承 _inherit = '' _inherits = '' # 定义 SQL 约束的列表属性 _sql_constrains = [ # 约束名称,SQL 表达式,违反约束时显示的错误消息 ('constraint_name', 'sql_expression', 'error_message'), ]
# 字段 name = fields.Char() value = fields.Integer() value2 = fields.Float(compute="_value_pc", store=True) # 通常用于在用户界面上显示一个长文本,以提供更详细的说明或说明 description = fields.Text() # 货币类型字段 currency_id = fields.Many2one(strings='货币类型',comodel_name = 'res.currency') retail_price = fields.Monetary('零售价格',currency_field='currency_id') # 数据关联 # comodel_name:必填参数,指定关联模型的名称。它是一个字符串,用于指定目标模型的技术名称。 # string:可选参数,用于设置字段的标签或显示名称。它是一个字符串,将用于在用户界面上显示字段的标签 fields.Many2one(comodel_name=None, string=None, **kwargs) # ondelete:指定当目标记录被删除时的行为。默认情况下,它为 cascade,表示级联删除关联记录。 # 还可以设置为 restrict(阻止删除)、set null(设置为空)等。 # domain:用于限制可选的关联记录的域表达式。它是一个字符串或元组,用于筛选关联模型中的记录。 # context:为该字段提供上下文变量。它是一个字典,用于传递其他信息给关联模型。 # required:指定是否该字段是必需的。默认为 False,表示可选字段;设置为 True 表示必需字段。 # readonly:指定是否只读。默认为 False,表示可编辑的字段;设置为 True 表示只读字段
属性参数 | 类型 | 解释 | 默认值 |
---|---|---|---|
string | unicode | 用户可见的字段标签 | 字段名 |
size | Int | 字符串长度 | 不限 |
**required ** | bool | True-不允许为空 | False |
help | unicode | 向用户提供的提示信息 | ‘’ |
index | bool | 对字段创建数据库索引 | False |
readonly | bool | 只读 | False |
copy | bool | 复制记录时是否应复制字段值 | True |
default | 根据字段的类型 | 默认值 | 无 |
translate | bool | 根据多语言来显示字段 | False |
groups | base.group_user | 字段级的权限控制,只有对应的组对其有访问权限 | 无 |
states | {‘lost’:[(‘readonly’),True]} | 对ui的展现设置属性 | 无 |
digits | typle(总位数, 小数位数) | 字符串 | 指定数值字段(例如浮点数或整数)的显示格式和精度 | 根据需要在后台进行配置 | 2 |
@api.model:定义静态方法,可以在模型类的任何实例或记录上调用,而不需要实例化模型类。 # 弃用 @api.multi:定义实例方法,可以在模型类的实例上调用,并且可以在多个记录上进行迭代。 @api.one:定义实例方法,只能在模型类的单个记录上调用。 @api.depends:定义计算字段(computed field),值会根据指定的依赖字段自动计算。 @api.constrains:定义约束方法,在保存记录时会进行验证,并在不满足约束条件时引发异常。 @api.onchange:定义触发方法,在指定的字段值发生更改时自动触发。 @api.model_create_multi:定义批量创建记录的方法,可以一次性创建多个记录。 @api.model_delete_multi:定义批量删除记录的方法,可以一次性删除多个记录。 @api.model_cr:定义在模型类的数据库表创建时执行的方法。 @api.model_save:定义在模型类的记录保存时执行的方法。 @api.returns:用来指定API接口返回的数据类型。它可以在API文档中使用,用于描述API接口的返回值类型,帮助开发者理解该接口返回的数据结构。
方法 | 解释 | 参数 | 返回值 |
---|---|---|---|
create | 创建 | vals_list:Dict | List[Dict] | 创建成功的记录集 |
write | 更新 | vals:dict | True成功False失败 |
unlink | 删除 | 无 | 无 |
read | 获取数据 | 可不传 | 字典列表 |
search | 查询数据 | domain:List | 符合查询条件的记录集 |
search_read | 查询数据 | 可不传 | 符合查询条件的字典列表 |
方法 | 解释 | 参数 | 返回值 |
---|---|---|---|
search_count | 统计行数 | int-查询结果的行数 | |
name_get | 文本标签获取 | tuple-记录的文本表达形式 | |
name_search | 根据记录文本标签查询记录 | ||
_auto_init | 模块升级安装模型初始化 | ||
init | 模块升级安装模型初始化 | ||
fields_get_keys | 模型字段名称获取 | ||
copy | 记录复制 | ||
exists | 检查数据集是否为空 | ||
browse | 使用id创建记录集 | List[int] | 返回符合条件的数据集 |
ids | 获取记录集中的id列表 | ||
ensure_one | 校验记录集是否为单例 | ||
with_env | 替换记录集的环境信息 | ||
sudo | 赋予超级权限 | ||
with_user | 替换记录集用户 | ||
with_context | 替换记录集上下文 | ||
mapped | 读取记录集字段值 | ||
filtered | 记录集筛选 | ||
filtered_domain | domian格式记录集筛选 | ||
sorted | 记录集排序 | ||
update | 记录集更新 |
self.env
在Odoo中表示当前环境(Environment)的上下文。它是一个用于访问数据库和模型数据的重要对象
# 通过self.env获取当前环境对象,并使用该环境对象访问res.users模型
self.env['res.users']
# 查询一条记录
xx = self.env['res.users']
xx.search([('id', '=', '1')]).unlink()
def create(self, vals_list): ''' 为模型创建新记录。 新记录初始化使用dicts列表中的值'vals_list',必要时使用:meth: ~.default_get'中的值。 :param vals_list:list[dict] | dict :return: 已创建的记录 :AccessError:如果当前用户不允许创建指定型号的记录 :ValidationError:如果用户试图为选择字段输入无效的值 :ValueError:如果在创建值中指定的字段名不存在。 :UserError:如果操作的结果将在对象的层次结构中创建循环 (比如将一个对象设置为它自己的父对象) ''' # 在xx对象中,创建一条新纪录 self.create({'field': "value"}) # 在xx对象中,创建多条新纪录 self.create([{'field1': "value1"},{'field2': "value2"}])
def write(self, vals):
'''
用提供的值更新`self`中的所有记录。
:param vals:dict 要更新的字段和要在其上设置的值
:引发AccessError:如果用户不允许修改指定的记录/字段
:引发ValidationError:如果为选择字段指定了无效值
:引发UserError:如果操作的结果将在对象的层次结构中创建循环(例如将对象设置为其自己的父对象)
'''
# 先获取需要修改的表对象,再将该表中的某条记录的数据进行一个更新
self.write({'field': "value"})
def unlink(self):
'''
删除`self`中的记录。
:引发AccessError:如果用户不被允许删除所有给定的记录
:引发UserError:如果该记录是其他记录的默认属性
'''
# 先获取需要删除的表对象,再将该表中的某条记录删除掉
self.unlink()
def read(self, fields=None, load='_classic_read'):
'''
读取`self`,low-level/RPC中记录的请求字段方法。
:param fields:list 要返回的字段名(默认为所有字段)
:param load:str 加载模式,目前唯一的选项是设置为`None`避免加载m2o字段的`name_get`
:返回:将字段名映射到它们的值的字典列表,每个记录使用一个字典
:rtype:列表
:抛出AccessError:如果用户不被允许访问请求的信息
:抛出ValueError:如果请求的字段不存在
'''
xx = read(self,fields)
@api.model @api.returns('self', upgrade=lambda self, value, domain, offset=0, limit=None, order=None, count=False: value if count else self.browse(value), downgrade=lambda self, value, domain, offset=0, limit=None, order=None, count=False: value if count else value.ids) def search(self, domain, offset=0, limit=None, order=None, count=False): ''' search(domain[,offset=0][,limit=None][,order=None][,count=False]) 搜索基于“域”的记录 :ref: `search domain <reference/orm/domains>` :param domain: :ref: '一个搜索域<reference/orm/domains>。使用空的列表以匹配所有记录。 :param offset:int 要忽略的结果数量(默认值:none) :param limit:int 要返回的最大记录数(默认:所有) :param order:str 排序字符串 :param count:bool 如果为True,则只计算并返回匹配记录的数量(默认值:False) :returns: 最多`limit`条匹配搜索条件的记录 :引发AccessError:如果用户不被允许访问请求的信息 ''' # 查询模型内的全部数据 result= self.env['res.users'].search([]) # 查询指定条件数据 xx = result.search([('id', '=', 1), ('status', '=', True)]) # 查询前2条数据 xx = result.search([ ('name', '=', attachment_name), ('res_model', '=', self.model), ('res_id', '=', record.id) ], limit=2) # 关联查询 student = self.env['emp.student'] teacher = self.env['emp.teacher'] xx = teacher.search([('id', '=', student.search([('id', '=', 1)]).teacher_id.id)]) print (xx) print (xx.name) print (xx.sex)#类似于sql中的嵌套查询
@api.model def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None, **read_kwargs): ''' 执行 a:meth: `search`,然后执行 a:meth:`read`。 :param domain:搜索域,参见:meth:`Search '中的' args`'参数。默认为将匹配所有记录的空域。 :param fields:要读取的字段列表,参见:meth:`read`中的`fields`参数。默认为所有字段。 :param offset:int 要跳过的记录数,参见:meth:`search '中的' offset '参数。默认为0。 :param limit:int 要返回的最大记录数,参见:meth:`search '中的' limit '参数。默认为无限制。 :param order:排序结果的列,参见:meth:`search '中的' order '参数。默认为无排序。 :param read_kwargs:用于调用的所有已读关键字参数 `read(…, **read_kwargs)`方法,例如您可以使用 `search_read(…, load= ")`,以避免计算name_get :return:包含查询字段的字典列表。 :rtype:list(dict)。 ''' xx = search_read(domain,fileds) # 如果不需要权限进行增删改查,则直接在模型后面加上sudo()(一般适用于接口) xx = request.env['res.users'].sudo().search([('id', '=', pk)])
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。