首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

odoo 开发入门教程系列-模型之间关系(Relations Between Models)

模型之间关系(Relations Between Models) 上一章介绍了为包含基本字段模型创建自定义视图。然而,在任何真实业务场景,我们都需要不止一个模型。此外,模型之间链接是必要。...例如,我们通过partner_id字段测试模型上定义了到res.partner模型链接。...comodel,必须在comodel定义Many2one 字段 练习 添加房地产报价表 创建 estate.property.offer 模型,并添加以下字段: Field Type Attributes...首先,我们不需要所有模型操作或菜单。某些模型只能通过另一个模型访问。我们练习中就是这样:报价总是通过房产获得。 其次,尽管property_id字段是必需,但我们没有将其包含在视图中。...当我们通过one2many字段创建记录,为了方便,会自动填充相应many2one 添加odoo14\custom\estate\models\estate_property_offer.py #!

4.4K40

odoo ORM API学习总结兼orm学习教程

取决于字段属性,添加一个默认公司条件 limit (int) – 读取可选限制 注意:odoo不会在当前模型对应表为One2many,Many2many类型属性建立对应字段,但会为Many2one...related字段依赖项包含 Many2many 或者 One2many 字段 related 可以用于引用另一个模型 One2many 或Many2many 字段,前提是通过当前模型一个Many2one...这意味着视图中不存在字段创建记录期间不会触发调用。...在出现字段表单视图中,当修改某个给定字段调用该方法。包含表单存在伪记录上调用该方法。该记录上字段赋值将自动返回客户端。...实践发现,针对One2many字段,如果ids对应记录Many2one字段没存储当前模型主键ID,无法使用该命令。

13.3K10
您找到你想要的搜索结果了吗?
是的
没有找到

odoo 开发入门教程系列-模型和基本字段

模型和基本字段 在上一章末尾,我们创建一个odoo模块。然而,此时它仍然是一个空壳,不允许我们存储任何数据。...api, SUPERUSER_ID 练习 创建estate_property表最小化模型 odoo14/custom/estate/models/estate_property.py 定义model...有两大类领域字段:‘简单’字段--直接存储模型原子值,形如Boolean, Float, Char, Text, Date 和Selection, ‘关系型’ 字段--连接相同或者不同模型记录...required (bool, default: False) 如果为 True, 表示该字段值不能为空。创建记录必须拥有默认值或给定值。...自动创建字段(Automatic Fields) 参考: 该话题相关文档可参考 Automatic fields. odoo会在所有model(当然,也可以配置禁止自动创建某些字段)创建少数字段

2.3K30

odoo 开发入门教程系列-计算字段和变更(Computed Fields And Onchanges)

本章目标 房地产模型,自动计算总面积和最佳报价 预期效果: 地产报价模型,自动计算合法日期且可被更新 我们房地产模块,我们定义了生活区和花园区。...在这种情况下,不会从数据库检索字段值,而是通过调用模型方法来动态计算字段值。 要创建计算字段,请创建字段并将其属性compute设置为方法名称。...提示: create_date 仅在记录创建被填充,因此需要一个回退,防止创建奔溃 表单和列表视图中添加字段,正如本章目标显示第二个动画中一样。...练习--为花园面积和朝向赋值 estate.property模型创建 onchange 方法以便当勾选花园,设置花园面积(10)和朝向(North),未勾选,移除花园面积和朝向值。...始终首选computed field,因为它们也是表单视图上下文之外触发。永远不要使用onchange业务逻辑添加到模型

3.1K30

odoo wizard界面显示带复选框列表及勾选数据获取

wizard可以通过关系字段many2one或many2many)引用常规记录或wizard记录,但常规记录不能通过many2one字段引用wizard记录 详细代码 注意:为了更清楚表达本文主题...以下属性皆hasCheckBoxes 为"true"情况下起作用。 modelName 点击列表复选框,需要访问模型名称,需要配合modelMethod方法使用,缺一不可。...以上参数同下文saveSelectionsToSessionStorage 参数可同时共存 如果需要将action绑定到指定模型指定视图Action,可以ir.actions.act_window定义添加...> 说明: saveSelectionsToSessionStorage 为"true"则表示点击复选框当前选取记录存到浏览器sessionStorage,可选 odoo14\custom\estate...odoo14\custom\estate\static\src\js\list_renderer.js 注意:之所以uuid函数定义list_renderer.js,是为了避免因为js顺序加载问题

5.2K60

odoo 权限管理学习总结

res_partner表,那么odoo如何区分用户类型以及如何做权限控制呢?...--略--> 查看效果 注意: 实践发现,通过界面点击,访问一些菜单界面,会在菜单访问URL(参见菜单访问自动生成URL)自动添加model,...默认允许记录规则:如果授予模型访问权限(Access Rights),并且没有规则适用于用户操作和模型,则授予访问权限 记录规则保存在ir.rule模型表里,我们通过管理ir_rule表记录,即可控制记录访问权限...如果当前用户不在列出,他无权访问该字段: 将自动从请求视图中删除受限制字段 从fields_get()响应删除受限制字段 尝试(显式)读取或写入受限字段会导致访问错误 修改estate...注意:通过为当前视图中目标字段添加groups属性实现权限控制仅作用于当前视图,如果希望当前视图模型(Model)所有视图中,对该字段实现统一权限控制话,需要在模型定义,为目标字段添加groups

10K20

odoo 开发入门教程系列-继承(Inheritance)

创建报价,设置房产状态为‘Offer Received’,如果用户试图以低于已存在报价金额创建报价抛出错误。 提示: 可在vals获取property_id 字段,但是它是一个int型。...第一继承机制允许模块通过以下方式修改在另一个模块定义模型行为: 向模型添加字段 覆盖模型字段定义 给模型添加约束 给模型添加方法 重写模型现有方法 第二种继承机制...(委托)允许模型每个记录链接到父模型记录,并提供对该父记录字段透明访问。...odoo,第一种机制最常用。我们例子,我们希望向现有模型添加一个字段,这意味着我们将使用第一种机制。..." new_field = fields.Char(string="New Field") 这里可以找到两个字段添加到模型示例 class AccountMoveLine(models.Model

2.2K20

odoo 开发入门教程系列-模块交互

我们案例,该模块依赖estate 和account,包括房产发票创建逻辑。采用这种方式,estate和account模块可以独立安装。当两者都安装后,链接模块提供新功能。...如果重写生效,我们可以继续创建发票。不幸是,没有一种简单方法可以知道如何在Odoo创建任何给定对象。大多数时候,有必要查看其模型,以找到所需字段并提供适当值。...要创建发票行,我们需要以下信息: name:发票行描述 quantity price_unit 此外,发票行需要链接到发票。发票行链接到发票最简单、最有效方法是创建发票包含所有行。...为此account.move创建中包含invoice_line_ids字段,这是一个One2many字段。One2many和Many2many使用通用ORM方法描述特殊“commands”。...下面是一个创建test.model包含一个One2many字段line_ids简单示例: def inherited_action(self): self.env["test.model"

1.6K10

odoo 开发入门教程系列-一些用户界面

数据文件内容也是模块安装或者更新按序加载。因此,对CSV文件所做所有说明对XML文件都适用。...当数据链接到视图,我们将它们添加到views文件夹 本章,我们通过XML文件加载我们第一个action和菜单。Actions 和菜单为数据库标准记录。...odoo,用户接口(action,菜单和视图)大部分是通过创建和组装XML文件记录来定义。常见模式为 菜单> action > 视图。为了访问记录,用户几个菜单级中导航。...然而,菜单总是遵循一种体系结构,实际上有三个层次菜单: 根菜单,显示App切换器Odoo社区版切换器是一个下拉菜单) 第一级菜单,显示顶部栏 动作菜单 最容易方式是XML文件定义结构来创建菜单...Odoo有许多微调方式,但通常第一步是确保: 某些字段有默认值 某些字段只读 当记录重复,某些字段不能被拷贝 我们房产业务案例,我们希望:: 售价只读(往后将自动填充) 当记录重复,可用日期和售价不能被拷贝

2.8K30

odoo Actions学习总结

所有Action都有两个强制属性: type 当前Action类别,决定可以使用哪些字段以及如何解释action name action名称,客户端界面显示对action简短用户可读描述...包含字段: res_model action触发要显示视图关联模型 views (view_id,view_type)对列表。...如果未提供id,则客户端应获取所请求模型指定类型默认视图(这由 fields_view_get()自动完成)。列表第一种类型是默认视图类型,执行操作默认打开。...web客户端默认为80 name(可选),action名称,界面显示拼接到当前面包屑导航(现有导航面包屑 / name值)。...": a_product_id, "target": "new", } 另一个例子,在当前页面打开estate.customer模块默认列表视图 { 'type': 'ir.actions.act_window

2.6K30

odoo 开发入门教程系列-基本视图

在上一章已经看到,odoo能够为给定模型生成默认视图。实际上,默认视图对于业务应用程序来说是不可接受。相反,我们至少应该以逻辑方式组织各个字段。 视图是带有操作和菜单XML文件定义。...它们是ir.ui.view model实例。 我们estate模块,我们需要以逻辑方式组织字段列表(树)视图中,我们希望显示不仅仅是名称。 表单视图中,应该对字段进行分组。...练习 -- 添加自定义表单视图 合适XML文件为estate.property 定义视图 为了避免每次修改视图都重新启动服务器,可以启动服务器添加--dev-xml,以便只刷新页面就可以查看视图修改...odoo,domain对记录上条件进行编码:domain是用于选择模型记录子集条件列表。每个条件都是一个包含字段名、运算符和值三元组。...模型定义一个搜索视图 添加过滤和分组 添加以下内容到之前创建搜索视图 一个显示avaliable地产过滤器,也就说,state应该为 “New“ 或者“Offer Received”。

3.2K40

odoo 开发入门教程系列-约束(Constraints)

约束(Constraints) 上一章介绍了向模型添加一些业务逻辑能力。我们现在可以按钮链接到业务代码,但如何防止用户输入错误数据?...例如,我们房地产模块,没有什么可以阻止用户设置负预期价格。 odoo提供了两种设置自动验证恒定式方法:Python约束 and SQL约束。...请注意,可能存在阻止设置SQL约束数据。...Python约束定义为用 constrains()修饰方法,并在记录集上调用。修饰符指定约束涉及哪些字段。当修改这些字段任何字段,将自动计算约束。...如果不满足该方法恒定式,则该方法引发异常: from odoo.exceptions import ValidationError ...

1.4K20

odoo context上下文用法总结

--此处代码略...--> 说明:'group_by': '分组字段名称' 用于视图对象按钮,传递数据给模型方法 模型设计 #!...> 说明:context属性值字典键值如果为模型定义字段名称,则该字段名称必须以元素形式,出现在模型对应视图(即不能是内联视图,比如内联Tree列表),否则会出现类似错误提示...': 4, 'property_ids': [[4, 49, False], [4, 48, False]]} ([1],) 说明:args 从日志来看,args接收了当前记录ID 注意: 如果def...为可编辑列表视图字段搜索添加查询过滤条件](odoo 为可编辑列表视图字段搜索添加查询过滤条件.md) 用于记录集,传递数据给模型方法 模型设计 #!...create或者write方法,调用该方法前修改上下文,然后方法通过self.env.context获取上下文中目标key值,进而实现目标需求 res = super(EstatePropertyTag

2K20

odoo 开发入门教程系列-QWeb简史

目标: 本节结束创建一个房产看板视图 我们地产应用程序,我们希望添加一个看板视图来显示我们房产。看板视图是标准Odoo视图(如表单和列表视图),但其结构更灵活。...本例,它用于模板name设置为kanban-box :oe_kanban_global_click让可点击,以打开记录...练习--制作一个最小看版视图 根据上述提供简单例子,为房产创建一个最小化看板视图。唯一展示字段为name....每个字段都有两个属性 value 和raw_value。前者是根据当前用户参数格式化,后者则是直接通过read()读取。...在上面的示例字段name被添加到元素,但state它之外。当我们需要字段值但不想在视图中显示它,可以将其添加到元素之外。

2K20

odoo 开发入门教程系列-安全-简介

安全-简介 前一章我们已经创建了第一个打算用于存储业务数据表。odoo这样一个商业应用,第一个考虑问题就是谁(Odoo 用户(或者组用户))可以访问数据。...Data Files (CSV) Odoo是一个高度数据驱动系统。虽然通过Python代码定制行为,但是模块部分值加载设置数据。...country_id:id 通过使用外部标识指向国家. name 州名称 code 州代码 res.country.state model定义了这三个字段 按约定,导入数据文件存放在模块...,当前数据文件仅在模块被安装或者更新才被加载。...当模型没有定义任何访问权限时,odoo会认为没有任何用户可以访问数据,并在日志打印: 2022-12-14 09:01:38,994 32508 WARNING odoo odoo.modules.loading

91320

odoo 为form表单视图添加chatter功能

实践环境 Odoo 14.0-20221212 (Community Edition) 需求描述 如图,给表单新增一个类似聊天窗口,当记录一些表单活动(本例为自动记录当前记录状态变化) 需求实现 模型定义...odoo14\custom\estate\models\estate_property.py 需要继承mail.thread模型,并为需要追踪字段设置tracking属性,并设置属性值为真值 #!...,该模型类型为models.AbstractModel,其定义文件为 odoo14\odoo\addons\mail\models\mail_thread.py,其字段命名均以message_开头...tracking 该属性为True或数字,打开针对该属性所属字段修改日志--当所属字段内容发生变化时,系统会将该字段变化前后值写入日志,这个数字大小影响变更日志在日志排序。...,类型为models.AbstractModel,定义文件 odoo14\odoo\addons\mail\models\mail_activity.py,其字段命名均以activity_,对应模型定义

70120

odoo 为可编辑列表视图字段搜索添加查询过滤条件

实践环境 Odoo 14.0-20221212 (Community Edition) 需求描述 如下图,列表网仓记录详情页面(form视图),编辑内联视图中货主记录,为货主和仓库字段搜索,添加过滤条件...,具体如下: 添加、编辑货主,下拉列表只展示选取和当网仓记录所属公司关联货主,点击搜索更多,仅展示和当前网仓记录所属公司关联货主 添加、编辑货主,下拉列表只展示选取和当网仓记录关联仓库(到...“仓库” Tab页添加仓库),点击搜索更多,仅展示和当前网仓记录关联仓库。...--此处代码已省略--> 修改ResPartner,重写模型name_search(编辑货主字段,弹出下拉列表,会请求该模型函数),search_read(编辑货主字段...,点击下拉列表 搜索更多打开界面,会请求该模型函数) 提示:分析OmsNetworkLine模型定义可知道,货主字段(partner_id)为多对一字段,关联ResPartner 模型 class

1.1K30

Odoo 菜单定义和修改学习总结

name 如果不指定name,则: 如果为菜单设置了action,则获取action record定义name字段值作为菜单name属性值 如果未设置菜单action,则获取菜单外部ID为值作为菜单...name属性值 action 打开菜单需要执行action外部ID web_icon 指定菜单图标,格式:模块名称,图标路径,形如estate,static/img/icon.png 意为estate... groups 逗号分隔res.groups模型外部ID序列,形如groups="group_account_user,group_account_manager...如果外部ID以-为前缀,则从菜单组移除该ID代表组,注意,如果指定用户组不是在当前模块定义,需要指定所在模块名称,形如estate.group_estate_property_root_menu...ID,如果上级菜单不在当前模块,则需要指定上级菜单所在模块,形如parent="moduleName.parent_menu_id" 修改菜单 本节要介绍是一种特殊修改方式,并不是直接修改原有菜单定义

1.3K10

Odoo 基础教程系列」第三篇——从 Todo 应用开始(2)

选择字段 在上一篇教程,我们已经创建好了待办事项模型,但是只是添加了「描述」和「已完成?」两个字段,这肯定是不能满足我们需求。...此处我们还给这个字段添加了默认值 todo,表示当一个待办事项被创建后,如果没有指定紧急程度,默认是待办状态。我们可以为任意类型字段添加默认值。...在上一篇教程我们提到过,在对模型进行改动之后,需要对模块进行升级才能看到变更后样子,除了从应用列表中找到模块进行升级外,我们还可以命令行Odoo 启动命令加上参数 -u todo 指定升级...is_expired 字段加了进去,并且还加上了属性 invisible,这个属性作用是当前字段隐藏起来,因为这里我们不希望用户看到这个字段值,而是结果反映在颜色上。...然后我们再看到 标签多了一个属性 decoration-danger,这个属性可以接受表达式或字段名作为值,当结果为真,这个属性就会生效, TreeView 满足表达式行以红色标记

1.3K10

odoo 给列表视图添加按钮实现数据文件导入

; }, _onUpload: function (event) { var self = this; // 如果隐藏上传表单不存在创建...替换estate_customer_tree为自定义全局唯一值 do_action 为 Widget() 快捷方式(定义odoo14\odoo\addons\web\static\src\js\core...\service_mixins.js),用于查找当前action管理器并执行action -- do_action函数第一个参数,格式如下: { 'type': 'ir.actions.act_window...prepend 模板元素内容插入到上下文节点第一个子元素之前。 before 模板元素内容插入到上下文节点之前。 after 模板元素内容插入到上下文节点之后。...,上下文节点命名属性将被设置为属性元素值(如果已经存在则替换,如果不存在则添加) 注意:参考官方文档,t-extend这种继承方式为旧继承方式,已废弃,笔者实践了最新继承方式,如下 <?

3.4K30
领券