一个新应用
房地产广告模块
假设需要开发一个房地产模块,该模块覆盖未包含在标准模块集中特定业务领域。
以下为包含一些广告的主列表视图
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 }