【学习笔记】ODOO

1、 基础

      1.1、模型 —— 元数据

        元数据(metadata)是指描述模型的数据,这些数据即前头带了下划线的模型属性

元数据 描述
_name 作为数据表名的参考
_rec_name 当一个字段值是一条记录时,这条记录要挑一个出来做代表
_description 对模型的简短描述
_inherit 指定继承自哪个模型,用于扩展现有模型的功能
_mixins 混入其他类,用于符合和组合功能
_order 指定查询数据时默认的排序方式
_security 定义访问模型的权限和安全规则
_defaults 设置字段的默认值
_constraints 定义字段值的约束条件
_sql_constraints 定义 SQL 级别的约束条件
_auto 指定是否自动创建数据表,通常用于虚拟模型

      1.2、模型 —— 字段属性

        Odoo 中用于定义字段的属性和参数,它们用于控制字段的行为和显示方式

字段属性 值类型 描述
string str 标签名
required bool 指定是否必填
readonly bool 指定是否只读
default str 指定默认值
help str 鼠标悬停显示的帮助文本
index bool 指定是否创建索引
compute method 指定计算数学使用的方法
inverse method 接定义计算字段的逆方法
store bool 指定是否要将计算字段存储在数据库中
comodel_name str 关联的模型
related str 关联其他模型的字段
size int 指定字符型字段的大小限制
digits tuple 指定浮点数字段的精度,元组的第一个值表示总位数,第二个值表示小数点的位数
groups str 用于指定特定组的用户才具有访问权限
domain str 用于视图中过滤该字段的可选值
ondelete str 指定当关联记录被删除时的行为
① cascade:级联删除,删除主记录时会删除相关联的所有子记录
② restrict:约束删除,不允许删除主记录,只有在没有关联的子记录时才允许删除
③ set null:删除主记录时,关联的外键字段将被设置为 null

      1.3、视图 —— record 标签

普通视图的字段 描述
name 视图名称
model 关联的模型
priority 用于标识记录的优先级或重要性级别
mode 指定视图的类型或显示模式
primary:主视图
secondary:次视图
inherit_id 指示当前视图继承自哪个视图,需要通过标签属性 ref 来指示
arch 指定 field 标签内部的结构,常见搭配 type=“xml” 的时候
动作视图的字段 描述
name 视图名称
res_model 关联的模型
view_id 执行动作时,默认加载的视图的 ID,需要通过标签属性 ref 来指示
view_mode 指定动作所支持的视图模式的顺序和类型
tree:树形视图、kanban:看板视图、form:表单视图
calendar:日历视图、pivot:透视图、graph:图表视图
activity活动视图
search_view_id 搜索视图的 ID,需要通过 ref 属性来指示
context 一个字典类型的数据结构,用于在不同的 Odoo 环境(如视图、模型、动作等)之间传递信息
help 用于提供帮助信息,可以结合 type=“html” 来写帮助信息

      1.4、视图 —— 控件、样式

控件 描述 常见属性搭配
badge 徽章 decoration-muted:灰色
decoration-warning:黄色
decoration-info:蓝色
decoration-success:绿色
decoration-danger:红色
statusbar 状态栏 statusbar_visible:可视性
statusbar_colors:为不同状态指定不同的颜色,例如statusbar_colors=‘{“cancel”:“red”}’
many2many_tags 小标签 color_field:标签颜色,例如options=“{‘color_field’: ‘color’}”
progressbar 进度条 -
handle 拖动手柄
image 图像
monetary 货币格式
email 邮件
url 超链接
样式 描述
按钮颜色 btn-primary:蓝色
btn-secondary:灰色
btn-success:绿色
btn-danger:红色
btn-warning:黄色
btn-info:青色

      1.4、视图 —— 视图继承

replace 字段值 描述
replace 替换目标元素及其内容
before 将新元素插到目标元素之前
after 将新元素插到目标元素之后
inside 将新元素插到目标元素内部
outside 将新元素插到目标元素的外部(这个使用比较少)
attributes 修改目标元素的属性
<!-- 修改tree标签属性 -->
<tree position="attributes">
	<attribute name="string">Quotations</attribute>
</tree>

<!-- 修改字段 -->
<field name="date_order" position="replace">
	<field name="create_date" string="Creation Date" widget="date" optional="show"/>
</field>

        当然,可以使用 xpath 进行定位

路径表达式 描述 举例
/ 所有直接子节点 //div/a —— 文档中所有div标签的所有直接 a 子标签
/html/div —— 从根节点出发选取(绝对路径)
// 所有子节点 //div//a —— 文档中所有div标签的所有 a 子标签中
. 当前节点 .//div —— 当前标签下的所有div标签
./@class —— 当前标签的class属性
.. 选取当前节点的父节点 ..//div —— 当前标签的父标签下所有的div标签
@ 选取属性 //input[@id=“kw”] —— 文档中所有id为kw的input标签
通配符 描述 举例
* 所有标签 //div/* —— 文档中所有div标签下的所有标签
@* 所有属性 //div/@* —— 文档中所有div标签下的所有标签
type() 类型 //button[text()=“登录”] —— 文档中type:text值为登录的所有按钮
定位 描述 举例
contains() 模糊定位( 包含 ) //*[contains(text(),‘cc’)] —— 文档中包含文本cc的所有标签
starts-with() 模糊定位( 以…开头 ) //*[starts-with(@title,‘ss’)] —— 文档中title字段以ss开头的所有标签
ends-with() 模糊定位( 以…结尾 ) //*[ends-with(text(),‘ee’)] —— 文档中以ee结尾的所有标签
and、or、not 逻辑定位( 与或非 ) //div[@attribute=‘aa’ and contains(text(),‘abc’)] —— 文档中attribute为aa且text包含abc的div标签
following-sibling:: 轴定位( 相邻的兄弟标签 ) //div[@class=‘c1’]/following-sibling::div[@class=‘c2’] —— 文档中class为c1的div标签的class为c2的div兄弟标签
follow:: 轴定位( 全文档中当前标签之后的标签 ) /
following-sibling:: 轴定位( 同一个父标签下当前标签之后的兄弟标签 ) //div[@class=‘c1’]/following-sibling::div[@class=‘c2’] —— 文档中class为c1的div标签的class为c2的div兄弟标签
preceding:: 轴定位( 全文档中当前标签之前的标签 ) /
preceding-sibling:: 轴定位( 同一个父标签下当前标签之前的兄弟标签 ) /
child:: 轴定位( 当前标签的所有子标签 ) /
parent:: 轴定位( 当前标签的直接父标签 ) /
ancestor:: 轴定位( 当前标签的所有祖先标签 ) /
下标 描述 举例
(标签)[n] 一组标签的第n个 (//div)[n] —— 文档中所有div标签的第n个标签
(标签)[last()] 一组标签的最后一个 (//div)[last()-n+1] —— 文档中所有div标签的倒数第n个标签
<xpath expr="//tree" position="attributes">
	<attribute name="banner_route">/onboarding/sale_quotation</attribute>
</xpath>

      1.5、self.env

常用属性 描述
self.env.user 表示 res.users 模型的一个实例 —— 当前用户
res.users.name:当前用户的名称
self.env.context :当前的上下文(context)字典,包含了调用模型方法时的附加信息
self.env.cr 当前的数据库游标(cursor),用于直接执行数据库操作
self.env.registry 块注册表,用于访问所有已注册的模型和方法
常用方法 描述
self.env[‘模型名’] 访问某个模型,可以通过它来调用对应模型的方法
self.env[‘模型名’].search([(‘field’, ‘=’, value)]) 执行模型的搜索操作,返回符合条件的记录集
self.env[‘模型名’].search_count([(‘field’, ‘=’, value)]) 执行模型的搜索操作,返回符合条件的记录数
self.env[‘模型名’].create(字典) 创建新记录,返回新创建的记录实例
self.env[‘模型名’].write(values) 更新记录的字段值,通常用于批量更新
self.env[‘模型名’].unlink() 删除记录,通常用于删除模型中的记录
self.env[‘模型名’].browse(ids) 根据 ID 列表访问记录,返回记录集
self.env[‘模型名’].fields_get() 获取模型字段的详细信息
self.env.ref(‘模型的.xml_id’) 根据xml_id查找记录

      1.6、context

        在 Odoo 中,context 是一个用于在不同操作和视图之间传递参数和控制行为的机制。它可以被认为是一个字典,在其中存储了各种键值对,这些键值对会影响系统的行为方式、数据处理、视图显示、默认值设置等,例如

context 常用的键名 描述
default_属性 设置模型字段的默认值
<!-- 目的:点击 tree 视图的创建按钮,然后给 form 视图中的记录设置默认值 -->
<record id="action_test_student" model="ir.actions.act_window">
	<field name="name">Action Test Student</field>
	<field name="res_model">test.student</field>
	<field name="view_mode">tree,form</field>
	<field name="context">{'default_gender': 'male'}</field>
</record>

分析:由于创建这个按钮调用的是 ir.actions.act_window 这个模型的方法,以让对应的 form 视图呈现出来,因此当要创建一条记录的时候,应该让动作记录来传达上下文

<!-- 目的:想要在一对多字段创建多方的一条数据 -->
<record id=&
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值