在reverse的计算过程中,所有使用所述inverse的字段都受到保护,这意味着即使它们的值不在缓存中,也无法计算它们。...这意味着视图中不存在的字段在创建记录期间不会触发调用。...odoo.api.model(method)[源代码] 修饰一个record-style的方法,其中self是一个空记录集,但其内容不相关,只有模型相关,可以理解为不会创建对应数据库记录的模型对象。...)[源代码] 修饰一个以字典列表为参数,并创建多条记录的方法。...在出现字段的表单视图中,当修改某个给定字段时,将调用该方法。在包含表单中存在的值的伪记录上调用该方法。该记录上的字段赋值将自动返回客户端。
以下为包含一些广告的主列表视图 form视图顶层区域概括了房产的重要信息,比如name,Property Type, Postcode等等。...列表记录详情页中,第一个tab包含了房产的描述信息,比如:bedrooms, Living area, Garage,Garden 第二个tab页,列出了房产的报价。...Goal: 该小节的目标是让odoo识别我们的新模块,一个空壳。它将显示在Apps中 创建模块的第一步:新建一个目录。...为了让开发更轻松,建议首先创建目录 /home/$USER/src/custom,然后在该目录中添加待创建的新模块对应的目录(本例为 estate)。...__init__.py 目前可以保持为空,下一章我们在回过头理它。而 __manifest__.py 文件必须描述模块,且不能保持为空。其必不可少的字段为 name, 但通常会包含更多信息。
这是因为,在odoo中加载CSV文件比加载XML文件更快。 odoo中,用户接口(action,菜单和视图)大部分是通过创建和组装XML文件中的记录来定义的。...常见的模式为 菜单> action > 视图。为了访问记录,用户在几个菜单级中导航。最深层是触发打开记录列表的action。 操作(Actions) 参考: 主题相关文档可以查看 Actions....view_mode 可获取的视图。本例中为列表(树)和表格视图。 odoo中到处都可以找到例子,但是这个 简单action的好例子。关注XML 数据文件结构,因为你在后续的练习中会用到。 <?...在适当的位置(本例中为odoo14/custom/estate/models/views)创建 estate_property_views.xml <?xml version="1.0"?...然而,菜单总是遵循一种体系结构,实际上有三个层次的菜单: 根菜单,显示在App切换器中(Odoo社区版切换器是一个下拉菜单) 第一级菜单,显示在顶部栏中 动作菜单 最容易的方式是在XML文件中定义结构来创建菜单
每个视图类型在列表中最多应出现一次。...form,指定需要加载的记录(否则创建一个条新记录) search_view_id (可选) (id, name) 对, id 为动作需要加载的指定搜索视图的数据库ID。...context (可选) 传递给视图的附加上下文 domain (可选) 隐式添加到所有视图搜索查询的过滤domain limit (可选) 默认情况下要在列表中显示的记录数。...(默认= tree,form ) 以逗号分隔的视图类型列表,格式为字符串(注意不要包含空格)。...,即使这不是模型的默认视图。
那么在odoo中如何区分用户类型以及如何做权限控制的呢?...highlight=noupdate base.user_admin :admin用户(ID为2的用户,用户数据定义在odoo\addons\base\data\res_users_data.xml中...标准格式为 model_,其中, 为模块中_name 替换.为_后的_name 的值 group_id/id 、group_id:id 代指需应用访问权限的组...> name 规则名称 model_id 需要应用规则的模型,标准格式为 model_,其中, 为模块中_name 替换.为_后值 groups...groups属性实现的权限控制仅作用于当前视图,如果希望当前视图模型(Model)的所有视图中,对该字段实现统一的权限控制话,需要在模型定义中,为目标字段添加groups属性,如下: selling_price
选取ffers"按钮),弹出一个向导(wizard)界面,并将详情页中内联tree视图("Offers" Tab页)的列表记录展示到向导界面,且要支持复选框,用于选取目标记录,然执行目标操作。...TransientModel类扩展Model并重用其所有现有机制,具有以下特殊性: wizard记录不是永久的;它们在一定时间后自动从数据库中删除。...#因为使用了@api.model修饰符,self为空记录集,所以不能通过self.fieldName = value 的方式赋值''' res = super(DemoWizard,...以下属性皆在hasCheckBoxes 为"true"的情况下起作用。 modelName 点击列表复选框时,需要访问的模型名称,需要配合modelMethod方法使用,缺一不可。...以上参数同下文saveSelectionsToSessionStorage 参数可同时共存 如果需要将action绑定到指定模型指定视图的Action,可以在ir.actions.act_window定义中添加
在我们的estate模块中,我们需要以逻辑方式组织字段: 在列表(树)视图中,我们希望显示的不仅仅是名称。 在表单视图中,应该对字段进行分组。 在搜索视图中,我们必须能够搜索的不仅仅是名称。...列表视图,也叫树(tree)视图, 以表格的形式显示记录。 视图根元素为。...last_seen"/> 练习 -- 添加一个自定义列表视图 在合适的XML文件中为estate.property model定义一个列表视图。...在odoo中,domain对记录上的条件进行编码:domain是用于选择模型记录子集的条件列表。每个条件都是一个包含字段名、运算符和值的三元组。...在合适的XML中为 estate.property 模型定义一个搜索视图 添加过滤和分组 添加以下内容到之前创建就的搜索视图 一个显示avaliable地产的过滤器,也就说,state应该为 “New
例如,在我们的房地产场景中,我们希望在常规用户视图中直接显示销售人员的财产列表。...创建报价时,设置房产状态为‘Offer Received’,如果用户试图以低于已存在报价的金额创建报价时抛出错误。 提示: 可在vals中获取property_id 字段,但是它是一个int型。...odoo中,第一种机制最常用。在我们的例子中,我们希望向现有模型添加一个字段,这意味着我们将使用第一种机制。...在我们的示例中为“models/inherited_model.py”。...目标: 在用户表单视图中显示与销售人员关联的avaliable房产列表其用户表单视图 Odoo提供了视图继承,其中子“扩展”视图应用于根视图之上,而不是就地修改现有视图(通过重写它们)。
Odoo自带内置引擎:QWeb模板。QWeb是Odoo使用的主要模板引擎。它是一个XML模板引擎,主要用于生成HTML片段和页面。 你可能已经在Odoo见过 看板,其中的记录以卡片状结构显示。...目标: 本节结束时创建一个房产的看板视图 在我们的地产应用程序中,我们希望添加一个看板视图来显示我们的房产。看板视图是标准的Odoo视图(如表单和列表视图),但其结构更灵活。...在本例中,它用于将模板的name设置为kanban-box :oe_kanban_global_click让可点击,以打开记录...练习--制作一个最小的看版视图 根据上述提供的简单例子,为房产创建一个最小化的看板视图。唯一展示的字段为name....在上面的示例中,字段name被添加到元素中,但state在它之外。当我们需要字段的值但不想在视图中显示它时,可以将其添加到元素之外。
模型之间的关系(Relations Between Models) 上一章介绍了为包含基本字段的模型创建自定义视图。然而,在任何真实的业务场景中,我们都需要不止一个模型。此外,模型之间的链接是必要的。...该练习是对前几章很好的扼要重述:你需要创建一个 model,设置 model,添加 动作和菜单,并且创建视图....买家可以是任何个人,然而,销售人员必须是房产机构的员工(即odoo用户)。 在odoo中,有两种我们经常引用的两种模型: res.partner: 一个partner为一个物理实体或者法人实体。...然而,在本例中,我们希望显示给定地产的报价列表,因此我们将使用one2many概念。 one2many是many2one的反向实现。...res.partner) required property_id Many2one (estate.property) required 使用price,partner_id,status字段创建列表和表单视图
_context is {'key1': True, 'key2': True} 需要注意的是,上下文是和记录集绑定的,修改后的上下文并不会在其它记录集中共享 应用场景示例 用于action,为关联视图添加默认搜索...、过滤条件 视图定义 为设置action打开的tree列表视图,添加默认搜索,搜索条件为 state字段值等于True 说明:context属性值中的字典的键值如果为模型中定义的字段名称,则该字段名称必须以元素的形式,出现在模型对应的视图(即不能是内联视图,比如内联Tree列表)中,否则会出现类似错误提示...为可编辑列表视图字段搜索添加查询过滤条件](odoo 为可编辑列表视图字段搜索添加查询过滤条件.md) 用于记录集,传递数据给模型方法 模型设计 #!...string='Color') @api.model def create(self, vals_list): # 通过重写模型的create或者write方法,调用该方法前修改上下文,然后在方法中通过
;limit 设置列表视图每页最大显示记录数 菜单定义 odoo14\custom\estate\views\estate_menus.xml estate_customer_tree 组件定义 js实现 为列表视图添加自定义上传数据文件按钮 odoo14\custom\estate\static\src\js\estate_customer_tree_upload.js...,想复用上述js,需要替换js中以下内容: 修改estate.upload.customer.mixin为其它自定义全局唯一值 替换o_estate_customer_upload为在对应按钮视图模板中定义的对应...class属性值 替换estate.CustomerHiddenUploadForm为在对应按钮视图模板中定义的隐藏表单模版名称 替换EstateCustomerListView.buttons为对应按钮视图模板中定义的按钮模版名称...替换estate_customer_tree为自定义全局唯一值 do_action 为 Widget() 的快捷方式(定义在odoo14\odoo\addons\web\static\src\js\core
ORM 层是odoo的一个关键组件。该层避免了手动写入大部分SQL并提供可扩展性和安全服务. 业务对象被定义为继承于 Model的Python类。可以通过在定义中设置属性来配置model。...最重要的属性为 _name,该属性定义了model在odoo系统中的属性。...Selection(选择列表)定义为元组列表,查看示例 修改odoo14/custom/estate/models/estate_property.py文件 #!...required (bool, default: False) 如果为 True, 表示该字段值不能为空。创建记录时必须拥有默认值或给定的值。...help (str, default: '') UI上为用户提供long-form 帮助提示 index (bool, default: False) 要求odoo在该列上创建数据库索引
要创建计算的字段,请创建字段并将其属性compute设置为方法的名称。计算方法应为self中的每个记录设置计算的字段的值。...提示: create_date 仅在记录创建时被填充,因此需要一个回退,防止创建时的奔溃 在表单和列表视图中添加字段,正如本章目标中显示的第二个动画中的一样。...Onchanges 参考: 主题关联文档可查看onchange(): 在我们的房地产模块中,我们还想帮助用户输入数据。设置“garden”字段后,我们希望为花园面积和朝向提供默认值。...练习--为花园面积和朝向赋值 在estate.property模型中创建 onchange 方法以便当勾选花园时,设置花园面积(10)和朝向(North),未勾选时,移除花园面积和朝向值。...永远不要使用onchange将业务逻辑添加到模型中。这是一个非常糟糕的想法,因为在以编程方式创建记录时不会自动触发onchanges;它们仅在表单视图中触发。
选择字段 在上一篇教程中,我们已经创建好了待办事项的模型,但是只是添加了「描述」和「已完成?」两个字段,这肯定是不能满足我们的需求的。...此处我们还给这个字段添加了默认值 todo,表示当一个待办事项被创建后,如果没有指定紧急程度,将默认是待办状态。我们可以为任意类型的字段添加默认值。...在上一篇教程中我们提到过,在对模型进行改动之后,需要对模块进行升级才能看到变更后的样子,除了从应用列表中找到模块进行升级外,我们还可以在命令行中给 Odoo 的启动命令加上参数 -u todo 指定升级...这个需求跟时间有关,并且时间是流动(一直在变化)的,所以我们应该要有一个方法在用户每次打开待办事项之前,把这个结果计算好,并且反馈给用户,还好 Odoo 的 ORM 已经为我们实现了相关的机制——计算字段...这篇教程中的代码同样会更新在我的 GitHub 仓库中。
安全-简介 前一章中我们已经创建了第一个打算用于存储业务数据的表。在odoo这样的一个商业应用中,第一个考虑的问题就是谁(Odoo 用户(或者组用户))可以访问数据。...可用于引用记录(不需要知道在数据库中的唯一标识)。...当数据和安全相关时,存放在 security 目录中,当数据和视图和action相关时,存放在 views 目录中....在country states的案例中, 你会发现country列表优先于country states列表被加载。这是因为country states 引用了country....标准格式为 model_,其中, 为模块中_name 替换.为_后的_name 的值 group_id/id 代指需应用访问权限的组。
实践环境 Odoo 14.0-20221212 (Community Edition) 需求描述 如下图,列表网仓记录详情页面(form视图),编辑内联视图中的货主记录,为货主和仓库字段搜索,添加过滤条件...,具体如下: 添加、编辑货主时,下拉列表中只展示选取和当网仓记录所属公司关联的货主,点击搜索更多,仅展示和当前网仓记录所属公司关联的货主 添加、编辑货主时,下拉列表中只展示选取和当网仓记录关联的仓库(到...“仓库” Tab页中添加的仓库),点击搜索更多,仅展示和当前网仓记录关联的仓库。...--此处代码已省略--> 添加过滤条件代码实现 修改视图,给视图添加context <?xml version="1.0" encoding="UTF-8" ?...,点击下拉列表时 搜索更多打开界面时,会请求该模型函数) 提示:分析OmsNetworkLine模型定义可知道,货主字段(partner_id)为多对一字段,关联ResPartner 模型 class
模块交互 在上一章中,我们使用继承来修改模块的行为。在我们的房地产场景中,我们希望更进一步,能够为客户生成发票。...Odoo提供了一个开发票模块,因此直接从我们的房地产模块创建发票是很简单的,也就是说,一旦某个房产设置为“已售出”,就会在Invoicing应用程序中创建发票 一个具体示例: 记账凭证(Account...链接模块(Link Module) 此类使用案例的常见方法是创建“链接”模块。在我们的案例中,该模块依赖estate 和account,包括房产的发票创建逻辑。...说明:__init__.py为空 重启服务,安装模块 创建发票 是时候生成发票了。我们希望为estate.property模型添加功能,即我们希望在出售房产时添加一些额外的逻辑。...为此,我们需要在estate_account模块中为创建一个模型,继承estate.property模型。
部署后,Odoo允许管理员安装任何模块组合,并根据业务需求配置/定制它,范围从小型商店到企业级公司。 本教程介绍了如何使用Git源代码在一小时内安装和配置Odoo,以便于升级,维护和自定义。...PostgreSQL用户 切换到postgres用户: sudo su - postgres 为数据库用户设置一个强密码并将其记录在一个安全的位置,您将在以下部分中需要它: createuser odoo...对于正常安装,您可以跳过此行,并且此Odoo实例将默认连接到端口8069。 注意 如配置日志部分中所述,在Ubuntu 16.04中有很多Odoo日志记录选项。...在/lib/systemd/system/odoo-server.service中创建一个新文件并添加以下内容: [Unit] Description=Odoo Open Source ERP and...xmlrpc_port = 8080 为Odoo测试环境创建一个systemd单元。
本教程解释如何使用psql在PostgreSQL服务器中显示数据库和表。 列出数据库 您可以使用该 psql 命令以任何系统用户身份连接到 PostgreSQL 服务器。...安装 PostgreSQL 软件包后,将创建名为 “postgres” 的管理用户。默认情况下,此用户可以在没有密码的情况下连接到本地 PostgreSQL 服务器。...要在不访问 psql shell 的情况下获取所有数据库的列表,请使用 -c 如下所示的开关: sudo -u postgres psql -c "\l" 列出数据库的另一种方法是使用以下 SQL 语句...例如,要连接到名为 “odoo” 的数据库,您应键入: \c odoo 切换数据库后,使用 \dt 列出所有数据库表: 输出将包括表的数量,每个表的名称及其架构,类型和所有者:...) 如果数据库为空,则输出将如下所示: No relations found.
领取专属 10元无门槛券
手把手带您无忧上云