实践环境 Odoo14.0-20221212(CommunityEdition) 代码实现 模块文件组织结构 说明:为了更好的表达本文主题,一些和主题无关的文件、代码已略去 odoo14\custom\estate │__init__.py │__manifest__.py │ ├─models │estate_customer.py │__init__.py │ ├─security │ir.model.access.csv │ ├─static │├─img ││icon.png ││ │└─src │├─js ││estate_customer_tree_upload.js ││ │└─...

  FGTdbwjSrhj4   2023年11月02日   83   0   0 Python

实践环境 Odoo14.0-20221212(CommunityEdition) 代码实现 模块文件组织结构 说明:为了更好的表达本文主题,一些和主题无关的文件、代码已略去 odoo14\custom\estate │__init__.py │__manifest__.py │ ├─models │estate_customer.py │estate_property_offer.py │__init__.py │ ├─static ││ │└─src │└─xml │estate_customer_inline_tree_buttons.js │ └─views estate_custome...

  FGTdbwjSrhj4   2023年11月02日   34   0   0 Python

环境 odoo-14.0.post20221212.tar Actions(动作) action定义系统响应用户操作的行为:登录、操作按钮、选择发票等… action可以存储在数据库中,也可以作为字典直接返回,例如按钮方法。所有Action都有两个强制属性: type当前Action的类别,决定可以使用哪些字段以及如何解释action nameaction的名称,在客户端的界面中显示对action的简短用户可读描述 Bindings(绑定) 除了两个强制属性外,所有action有用于在任意模型的上下文菜单中显示动作的可选属性: binding_model_id指定action绑定的模型,...

  FGTdbwjSrhj4   2023年11月02日   96   0   0 Python

环境 odoo-14.0.post20221212.tar WebControllers Controllers 控制器需要提供可扩展性,就像Model,但不能使用相同的机制,因为先决条件(已加载模块的数据库)可能还不可用(例如,未创建数据库或未选择数据库)。 因此,控制器提供了自己的与模型的扩展机制: 通过继承Controller创建控制器。通过route()修饰的方法定义路由: classMyController(odoo.http.Controller): @route('/some_url',auth='public') defhandler(self): returnstuff() ...

  FGTdbwjSrhj4   2023年11月02日   94   0   0 Python

环境 odoo-14.0.post20221212.tar context用法总结 获取上下文 >>>self.env.context返回字典数据,等价于self._context {'lang':'en_US','tz':'Europe/Brussels'} >>>self._context {'lang':'en_US','tz':'Europe/Brussels'} >>>recordSet.env.context注意,上下文是和记录集绑定的,上述的self也代表记录集 设置上下文 Model.with_context([conte...

  FGTdbwjSrhj4   2023年11月02日   98   0   0 Python

环境 odoo-14.0.post20221212.tar ORMAPI学习总结/学习教程 模型(Model) Model字段被定义为model自身的属性 fromodooimportmodels,fields classAModel(models.Model): _name='a.model.name' field1=fields.Char() 警告 字段的名称和方法的名称不能相同,最后定义的方法、函数名称会覆盖前面定义的相同名称。 默认的,字段的标签(Lable,即用户可见字段名称)为对应字段名称开头字母改成大写后的值,可通过string字段属性改成修改字段Label field2...

  FGTdbwjSrhj4   2023年11月02日   38   0   0 Python

环境 odoo-14.0.post20221212.tar base_user_role-12.0.2.1.2.zip 下载地址: https://apps.odoo.com/apps/modules/12.0/base_user_role/ 权限管理 简介 为了更好的熟悉权限,我们先来了解下用户,odoo中的用户分为三类: 内部用户(InternalUser):企业内部的用户,拥有对系统内部的访问权限,也就是说有odoo后端的访问权限。 门户用户(Portal):非企业内部用户,通常为业务合作伙伴用户,拥有有限的资源访问权限。 公共用户(Public):面向公众的权限,可以理解为游客权限。...

  FGTdbwjSrhj4   2023年11月02日   69   0   0 Python

一个新应用 房地产广告模块 假设需要开发一个房地产模块,该模块覆盖未包含在标准模块集中特定业务领域。 以下为包含一些广告的主列表视图 form视图顶层区域概括了房产的重要信息,比如name,PropertyType,Postcode等等。 列表记录详情页中,第一个tab包含了房产的描述信息,比如:bedrooms,Livingarea,Garage,Garden 第二个tab页,列出了房产的报价。我们可以在这里看到,潜在买家可以提供高于或低于预期售价的报价,取决于卖方是否接受报价。 准备插件目录 参考:和该主题相关的文档可参考manifest. Goal:该小节的目标是让odoo识别我们...

  FGTdbwjSrhj4   2023年11月02日   28   0   0 Python

模型和基本字段 在上一章的末尾,我们创建一个odoo模块。然而,此时它仍然是一个空壳,不允许我们存储任何数据。在我们的房地产模块中,我们希望将与房地产相关的信息(名称(name)、描述(description)、价格(price)、居住面积(livingarea)…)存储在数据库中。odoo框架提供了数据库交互的工具 开始练习前,请确保estate模块已被安装,也就是说必须以installed的状态出现在Apps列表中,如下 对象关系映射(Object-RelationalMapping) 参考:和本主题关联文档可参考ModelsAPI. ORM层是odoo的一个关键组件。该层避免了手动写入...

  FGTdbwjSrhj4   2023年11月02日   56   0   0 Python

安全-简介 前一章中我们已经创建了第一个打算用于存储业务数据的表。在odoo这样的一个商业应用中,第一个考虑的问题就是谁(Odoo用户(或者组用户))可以访问数据。odoo为指定用户组用户提供了一个安全的数据访问机制。 更多关于安全主题的详细信息可以查看AdvancedB:ACLandRecordRules。本章目标是覆盖我们新模块的最小安全需求。 DataFiles(CSV) Odoo是一个高度数据驱动的系统。虽然通过Python代码定制行为,但是模块的部分值在加载时设置的数据中。加载数据的方式之一是通过一个CSV文件,比如在安装base模块时加载的countrystates列表 "id",...

  FGTdbwjSrhj4   2023年11月02日   93   0   0 Python

一些用户界面 数据文件(XML) 参考:该主题关联文档可以查看DataFiles. 上一章,我们通过CSV文件添加了数据。当需要添加数据格式简单时,用CSV格式还是很方便的,当数据格式更复杂时(比如视图架构或者一个邮件模板),我们使用XML格式。比如包含HTMLtags的helpfield。虽然可以通过CSV文件加载这样的数据,但是使用XML更方便。 类似CSV文件,XML文件也必须按约定添加到合适的目录,并在__manifest__.py中进行定义。数据文件中的内容也是在模块安装或者更新时按序加载。因此,对CSV文件所做的所有说明对XML文件都适用。当数据链接到视图时,我们将它们添加到vie...

  FGTdbwjSrhj4   2023年11月02日   56   0   0 Python

在上一章中已经看到,odoo能够为给定模型生成默认视图。实际上,默认视图对于业务应用程序来说是不可接受的。相反,我们至少应该以逻辑的方式组织各个字段。 视图是在带有操作和菜单的XML文件中定义的。它们是ir.ui.viewmodel的实例。 在我们的estate模块中,我们需要以逻辑方式组织字段: 在列表(树)视图中,我们希望显示的不仅仅是名称。 在表单视图中,应该对字段进行分组。 在搜索视图中,我们必须能够搜索的不仅仅是名称。具体来说,我们需要"Available"的地产筛选器和按"postcode"分组的快捷方式 List(列表) 参考:主题关联文档可参考List. 列表视图,也叫树(...

  FGTdbwjSrhj4   2023年11月02日   43   0   0 Python

模型之间的关系(RelationsBetweenModels) 上一章介绍了为包含基本字段的模型创建自定义视图。然而,在任何真实的业务场景中,我们都需要不止一个模型。此外,模型之间的链接是必要的。人们可以很容易地想象一个模型包含客户,另一个模型则包含用户列表。你可能需要参考任何现有业务模型上的客户或用户。 在我们的estate模块中,我们需要有关房产的以下信息: 购买房产的客户 出售房产的真实重述代理人 房产类型:房子、公寓、顶层公寓、城堡… 显示了该酒店特色的一系列标签:舒适、翻新… 收到的报价清单 Many2one 参考:本主题相关文档可查阅Many2one 在我们的房地产模块中,我们...

  FGTdbwjSrhj4   2023年11月02日   36   0   0 Python

计算的字段和变更(ComputedFieldsAndOnchanges) 模型之间的关系是任何Odoo模块的关键组成部分。它们对于任何业务案例的建模都是必要的。然而,我们可能需要给定模型中字段之间的链接。有时,一个字段的值是根据其他字段的值确定的,有时我们希望帮助用户输入数据。 “ComputedFieldsAndOnchanges”的概念支持这些情况。虽然本章在技术上并不复杂,但这两个概念的语义都非常重要。这也是我们第一次编写Python逻辑。到目前为止,除了类定义和字段声明之外,我们还没有编写任何其他东西。 计算的字段(ComputedFields) 参考:主题关联文档可查阅Compute...

  FGTdbwjSrhj4   2023年11月02日   26   0   0 Python

准备一些操作(Action)? 到目前为止,我们主要通过声明字段和视图来构建模块。在任何真实的业务场景中,我们都希望将一些业务逻辑链接到操作按钮。在我们的房地产示例中,我们希望能够: 取消或将房产设置为已售出 接受或拒绝报价 有人可能会说,我们已经可以通过手动更改状态来完成这些事情,但这并不太方便。此外,我们还想增加一些额外的处理:当报价被接受时,我们想设定房产的售价和买家。 操作类型(ActionType) 参考:本主题相关文档可参考Actions和Errormanagement 在我们的房地产模块中,我们希望将些业务逻辑和一些按钮关联,最常见的做法是: 在视图中添加一个按钮,比如在视...

  FGTdbwjSrhj4   2023年11月02日   26   0   0 Python

约束(Constraints) 上一章介绍了向模型中添加一些业务逻辑的能力。我们现在可以将按钮链接到业务代码,但如何防止用户输入错误的数据?例如,在我们的房地产模块中,没有什么可以阻止用户设置负预期价格。 odoo提供了两种设置自动验证恒定式的方法:Python约束andSQL约束。 SQL 参考:与此主题相关的文档可以查看Models和PostgreSQL文档 我们通过模型属性_sql_constraints来定义SQL约束,该属性被赋值为一个包含三元组(name,sql_definition,message)的列表,其中name为一个合法的SQL约束名称,sql_definition为表约...

  FGTdbwjSrhj4   2023年11月02日   79   0   0 Python

添加修饰 我们的房地产模块现在从商业角度来看是有意义的。我们创建了特定的视图,添加了几个操作按钮和约束。然而,我们的用户界面仍然有点粗糙。我们希望为列表视图添加一些颜色,并使一些字段和按钮有条件地消失。例如,当房产已出售或取消时,“已售出”和“取消”按钮应消失,因为此时不再允许更改状态。 参考:文档关联的主题可以查看Views. 内联视图(InlineViews) 在房地产模块中,我们为房产添加了一个报价列表。我们通过以下代码简单地添加了offer_ids字段: <fieldname="offer_ids"/> 该字段使用estate.properties.offer的特定视图。...

  FGTdbwjSrhj4   2023年11月02日   88   0   0 Python

继承(Inheritance) Odoo的一个强大方面是它的模块化。模块专用于业务需求,但模块也可以相互交互。这对于扩展现有模块的功能非常有用。例如,在我们的房地产场景中,我们希望在常规用户视图中直接显示销售人员的财产列表。 在介绍特定的Odoo模块继承之前,让我们看看如何更改标准CRUD(创建、检索,更新或删除)方法的行为 Python继承(PythonInheritance) 目标: 不能删除状态不为New、Canceled的房产预期效果动画地址:https://www.odoo.com/documentation/14.0/zh_CN/_images/unlink.gif 房产...

  FGTdbwjSrhj4   2023年11月02日   29   0   0 Python

QWeb简史 到目前为止,我们的房地产模块的界面设计相当有限。构建列表视图很简单,因为只需要字段列表。表单视图也是如此:尽管使用了一些标记,如<group>或<page>,但在设计方面几乎没有什么可做的。 然而,如果我们想给我们的应用程序一个独特的外观,就必须更进一步,能够设计新的视图。此外,PDF报告或网站页面等其他功能需要另一个更灵活的工具:模板引擎。 您可能已经熟悉现有的引擎,如Jinja(Python)、ERB(Ruby)或Twig(PHP)。Odoo自带内置引擎:QWeb模板。QWeb是Odoo使用的主要模板引擎。它是一个XML模板引擎,主要用于生成HTML片...

  FGTdbwjSrhj4   2023年11月02日   22   0   0 Python

实践环境 Odoo14.0-20221212(CommunityEdition) 需求描述 如下图(非实际项目界面截图,仅用于介绍本文主题),打开记录详情页(form视图),点击某个按钮(图中的"选取ffers"按钮),弹出一个向导(wizard)界面,并将详情页中内联tree视图("Offers"Tab页)的列表记录展示到向导界面,且要支持复选框,用于选取目标记录,然执行目标操作。 详情页所属模型EstateProperty classEstateProperty(models.Model): _name='estate.property' _description='estatepro...

  FGTdbwjSrhj4   2023年11月02日   47   0   0 Python
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~