原文地址
这一章的目的是为了创建一个全新的Odoo模块奠定基础。 我们将从零开始(start from scratch)只做最少的配置就能让odoo识别出我们的模块。在接下来的章节中,我们将逐步的增加特性让他成为一个真实的商业应用。
我们全新的模块将覆盖一个非常具体的商业领域因此它并不包含标准的odoo模块:房地产。值得注意的是在开发一个新模块之前,确定一下odoo是否已经提供了相关模块满足了类似的商业需求,这将是一个好主意。
这里是一个总览关于list视图,其中包含了一些广告。
form视图的顶部区域汇总了房地产的重要信息,比如名称,不动产类型,邮编等等。第一个tab标签描述了房产的一些属性: 房间数量,居住面积,车库,花园等。
第二个tab标签列出了房产的报价单。 我们能看到潜在的购买客户给出的报价单可能比期望的价格高也可能比期望的价格低。 这取决于房主要接受哪个订单。
关于这个主题的文档可用在这里找到manifest.
note:
这个章节的目标是让Odoo识别出我们的新模块,它现在还是一个空壳,它将显示在应用模块里。
建立模型的第一步是创建它的目录,在technical-training-sandbox(技术训练的沙盒模型)目录,创建一个新的目录estate。
一个模块必须包含至少两个文件_manifest_.py和init.py. init.py现在可用留空,我们将在下一章节在回来编辑它。 另一方面,manifest.py文件必须描述我们的模块不能留空,它只需要一个name字段,但是它通常包含更多的信息。
让我们看一下CRM的清单文件,为了提供对模块的描述(名字,分类,总结,网站…),它还列出来了它的依赖项。 一个依赖项意味着Odoo框架将确认本模块在安装之前这些依赖项已经被安装了。 还有,如果其中的一个依赖项被卸载,那么我们的模块以及其他依赖这个模块的模块也会被卸载, 想一下linux的包管理器 apt dnf, Odoo用同样的方式工作。
# -*- 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
}
练习:
创建需要的addon文件
创建下面的文件夹和文件:
/home/$USER/src/technical-training-sandbox/estate/__init__.py
/home/$USER/src/technical-training-sandbox/estate/__manifest__.py
The __manifest__.py 文件只需要定义name和依赖,唯一的依赖是base模块。
交作业:
在myaddons下新建一个目录estate
新建两个文件
__init__.py 可用为空
__manifest__.py
包含下列内容:
# -*- coding: utf-8 -*-
{
'name': "estate",
'depends': ['base'],
}
重新启动Odoo服务器并且打开应用页面,点击更新应用列表,搜索estate,你的模块就出现了,如果没有出现,试着将默认的应用过滤器去掉
警告:
记得要打开开发者模式,不然更新应用的按钮不会出现。
练习:
让你的模块成为App
增加合适的key到你们清单文件里,这样它将会出现在应用过滤器里。
交作业:
在清单文件里加上下面两行
'installable': True,
'application': True,
然后到应用里升级模块。
注意的一点: 在odoo-bin -u 这种升级并不完全等效于在应用菜单里升级模块。
比如上边这个作业,用odoo-bin -u 就完全没有效果。
你可用安装模块了,但是它明显是一个空壳,所以不会出现任何菜单。
一切ok吗? 如果是,让我们来创建第一个模型。