一个新应用

房地产广告模块

假设需要开发一个房地产模块,该模块覆盖未包含在标准模块集中特定业务领域。

以下为包含一些广告的主列表视图

form视图顶层区域概括了房产的重要信息,比如name,Property Type, Postcode等等。

列表记录详情页中,第一个tab包含了房产的描述信息,比如:bedrooms, Living area, Garage,Garden

第二个tab页,列出了房产的报价。我们可以在这里看到,潜在买家可以提供高于或低于预期售价的报价,取决于卖方是否接受报价。

准备插件目录

参考: 和该主题相关的文档可参考 manifest.

Goal: 该小节的目标是让odoo识别我们的新模块,一个空壳。它将显示在Apps

创建模块的第一步:新建一个目录。为了让开发更轻松,建议首先创建目录 /home/$USER/src/custom,然后在该目录中添加待创建的新模块对应的目录(本例为 estate)。

一个模块至少包含两个文件: 一个__manifest__.py 文件和一个 __init__.py 文件。__init__.py 目前可以保持为空,下一章我们在回过头理它。而 __manifest__.py 文件必须描述模块,且不能保持为空。其必不可少的字段为 name, 但通常会包含更多信息。

CRM file(如果打不开,可参见下文)为例,为了提供模块描述信息 (name, category, summary, website…), 它列出了它的依赖(depends)。odoo框架会确保depends中配置的依赖模块在我们的模块被安装之前安装。 而且,如果这些模块中的某个依赖被卸载,我们的模块及其它任何依赖它的模块都会被卸载。 Odoo采用和Linux发行包管理一样的工作方式。

创建以下目录及文件

  • odoo14/custom/estate/__init__.py(官方推荐路径:/home/$USER/src/custom/estate/__init__.py,注意这里的包名estate即为模块的Technical Name
  • odoo14/custom/estate/__manifest__.py(官方推荐路径:/home/$USER/src/custom/estate/__manifest__.py

__manifest__.py 文件只定义name和模块依赖,目前唯一必要的框架模块为 base。如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
{
'name': 'estate',
'depends': ['base']
}

添加 custom 目录路径到 addons-path,重启Odoo服务:

python odoo-bin --addons-path=custom,odoo/addons -r myodoo -w test123 -d odoo

验证

浏览器页面中访问Apps, 点击搜索estate

CRM file

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details. {
'name': 'CRM',
'version': '1.2',
'category': 'Sales/CRM',
'sequence': 15,
'summary': 'Track leads and close opportunities',
'description': "",
'website': 'https://www.odoo.com/page/crm',
'depends': [
'base_setup',
'sales_team',
'mail',
'calendar',
'resource',
'fetchmail',
'utm',
'web_tour',
'contacts',
'digest',
'phone_validation',
],
'data': [
'security/crm_security.xml',
'security/ir.model.access.csv', 'data/crm_lead_prediction_data.xml',
'data/crm_lost_reason_data.xml',
'data/crm_stage_data.xml',
'data/crm_team_data.xml',
'data/digest_data.xml',
'data/mail_data.xml',
'data/crm_recurring_plan_data.xml', 'wizard/crm_lead_lost_views.xml',
'wizard/crm_lead_to_opportunity_views.xml',
'wizard/crm_lead_to_opportunity_mass_views.xml',
'wizard/crm_merge_opportunities_views.xml', 'views/assets.xml',
'views/calendar_views.xml',
'views/crm_recurring_plan_views.xml',
'views/crm_menu_views.xml',
'views/crm_lost_reason_views.xml',
'views/crm_stage_views.xml',
'views/crm_lead_views.xml',
'views/digest_views.xml',
'views/mail_activity_views.xml',
'views/res_config_settings_views.xml',
'views/res_partner_views.xml',
'views/utm_campaign_views.xml',
'report/crm_activity_report_views.xml',
'report/crm_opportunity_report_views.xml',
'views/crm_team_views.xml',
],
'demo': [
'data/crm_team_demo.xml',
'data/mail_activity_demo.xml',
'data/crm_lead_demo.xml',
],
'css': ['static/src/css/crm.css'],
'installable': True,
'application': True,
'auto_install': False
}

odoo 开发入门教程系列-一个新应用的更多相关文章

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

    一些用户界面 数据文件 (XML) 参考: 该主题关联文档可以查看Data Files. 上一章,我们通过CSV文件添加了数据.当需要添加数据格式简单时,用CSV格式还是很方便的,当数据格式更复杂时( ...

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

    模块交互 在上一章中,我们使用继承来修改模块的行为.在我们的房地产场景中,我们希望更进一步,能够为客户生成发票.Odoo提供了一个开发票模块,因此直接从我们的房地产模块创建发票是很简单的,也就是说,一 ...

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

    继承(Inheritance) Odoo的一个强大方面是它的模块化.模块专用于业务需求,但模块也可以相互交互.这对于扩展现有模块的功能非常有用.例如,在我们的房地产场景中,我们希望在常规用户视图中直接 ...

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

    安全-简介 前一章中我们已经创建了第一个打算用于存储业务数据的表.在odoo这样的一个商业应用中,第一个考虑的问题就是谁(Odoo 用户(或者组用户))可以访问数据.odoo为指定用户组用户提供了一个 ...

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

    模型之间的关系(Relations Between Models) 上一章介绍了为包含基本字段的模型创建自定义视图.然而,在任何真实的业务场景中,我们都需要不止一个模型.此外,模型之间的链接是必要的. ...

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

    计算的字段和变更(Computed Fields And Onchanges) 模型之间的关系是任何Odoo模块的关键组成部分.它们对于任何业务案例的建模都是必要的.然而,我们可能需要给定模型中字段之 ...

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

    约束(Constraints) 上一章介绍了向模型中添加一些业务逻辑的能力.我们现在可以将按钮链接到业务代码,但如何防止用户输入错误的数据?例如,在我们的房地产模块中,没有什么可以阻止用户设置负预期价 ...

  8. odoo 开发入门教程系列-添加修饰

    添加修饰 我们的房地产模块现在从商业角度来看是有意义的.我们创建了特定的视图,添加了几个操作按钮和约束.然而,我们的用户界面仍然有点粗糙.我们希望为列表视图添加一些颜色,并使一些字段和按钮有条件地消失 ...

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

    QWeb简史 到目前为止,我们的房地产模块的界面设计相当有限.构建列表视图很简单,因为只需要字段列表.表单视图也是如此:尽管使用了一些标记,如<group>或<page>,但在 ...

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

    模型和基本字段 在上一章的末尾,我们创建一个odoo模块.然而,此时它仍然是一个空壳,不允许我们存储任何数据.在我们的房地产模块中,我们希望将与房地产相关的信息(名称(name).描述(descrip ...

随机推荐

  1. WPF 制作高性能的透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True)

    在 WPF 中,如果想做一个背景透明的异形窗口,基本上都要设置 WindowStyle="None".AllowsTransparency="True" 这两个 ...

  2. 痞子衡嵌入式:不同J-Link版本对于i.MXRT1170连接复位后处理行为有所不同

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是不同J-Link版本对于i.MXRT1170连接复位后处理行为. 痞子衡之前写过一篇旧文 <i.MXRT1170上用J-Link连 ...

  3. C#中接口的显式实现与隐式实现及其相关应用案例

    C#中接口的显式实现与隐式实现 最近在学习演化一款游戏项目框架时候,框架作者巧妙使用接口中方法的显式实现来变相对接口中方法进行"密封",增加实现接口的类访问方法的"成本& ...

  4. 机器学习策略篇:详解如何改善你的模型的表现(Improving your model performance)

    如何改善模型的表现 学过正交化,如何设立开发集和测试集,用人类水平错误率来估计贝叶斯错误率以及如何估计可避免偏差和方差.现在把它们全部组合起来写成一套指导方针,如何提高学习算法性能的指导方针. 所以想 ...

  5. .NET 使用 OpenTelemetry metrics 监控应用程序指标

    上一次我们讲了 OpenTelemetry Logs 与 OpenTelemetry Traces.今天继续来说说 OpenTelemetry Metrics. 随着现代应用程序的复杂性不断增加,对于 ...

  6. Grafana 开源了一款 eBPF 采集器 Beyla

    eBPF 的发展如火如荼,在可观测性领域大放异彩,Grafana 近期也发布了一款 eBPF 采集器,可以采集服务的 RED 指标,本文做一个尝鲜介绍,让读者有个大概了解. eBPF 基础介绍可以参考 ...

  7. 硬件开发笔记(十九):Altium Designer 21软件介绍和安装过程

    前言   AD硬件设计软件之一,前面说了allego,但是allego对项目的管理.原理图生成PCB,PCB反向原理图等方面比较复杂,对于一般的硬件(非多个高速电路),选择AD能够加大的节省开发工作量 ...

  8. Java实现管线拓扑关系连通性分析

    管线拓扑关系的连通性分析通常涉及图论(Graph Theory)中的概念,特别是无向图(Undirected Graph)的遍历算法,如深度优先搜索(DFS, Depth-First Search)或 ...

  9. Kubernetes容器生命周期 —— 钩子函数详解(postStart、preStop)

    1.概述 容器生命周期钩子(Container Lifecycle Hooks)监听容器生命周期的特定事件,并在事件发生时执行已注册的回调函数. 钩子函数能够感知自身生命周期中的事件,并在相应的时刻到 ...

  10. 【Vyos-开源篇-1】- VMware 安装 VyOS 虚拟机

    文章说明:使用VMware ESXi和VMware Workstation安装vyos软路由. 一.项目准备 1.1.VMware ESXi 我家里的是一台8核心,20G内存,2T的N5105工控机, ...