odoo11建立自定義模組原始碼
ODOO 官方建議模組骨架 ,
-
在addons/<my_module_name>/下結構如下:
資料夾許可權755 檔案許可權644 __openerp__.py 相關屬性: # name 模組名字 # summary 簡短介紹 # description 詳細描述 # author 作者 # website 模組網站 # category 模組分類 # version 模組版本號 # license 模組版本資訊 預設是 AGPL-3 # depends 模組依賴 # data 模組必須載入的資料檔案 # demo 示例資料 # installabel 預設為True 可安裝 # auto_install 預設是False 如果設為True 就根據依賴模組,依賴裝了,這個模組就安裝 # application 預設是 False 如果設為True 就成為應用模組 安裝自定義模組 服務啟動配置檔案 addons-path 加入自己的定義容器目錄 如 myaddons addons-path=addons,myaddons 更新模組服務列表,然後找到去安裝 模組資料夾管理 # data 放 demo 和 data xml # models 放模型定義 # controllers http 路徑控制 # views 放網頁檢視和模板 # static 放網頁的資源,裡面還有css, js ,img, lib 等 #
-
自動定的模組tech_demo
我們在ODOO資料夾下,新增addons_demo資料夾,如addons_demo/tech_demo下結構如下:
* __init__.py 內容如下(把模型匯入到應用)
from . import models
* __manifest__.py 內容如下(erp本身的配置)
# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. { 'name': 'tech_demo', 'version': '1.0', 'category': 'test', 'sequence': 8, 'summary': '', 'description': "", 'website': '', 'depends': [ ], 'data': [ 'views/tech_student_views.xml', 'views/tech_teacher_views.xml' ], 'demo': [], 'css': [], 'installable': True, 'application': True, 'auto_install': False, }
-
在models資料夾下,新建tech_demo.py
*tech_demo.py 內容如下(模型)
# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import api, fields, tools, models from odoo.tools.translate import _ class tech_student(models.Model): _name="tech.student" _description="" def _selection(self): team = self.env['crm.team'].sudo()._get_default_team_id(user_id=self.env.uid) return self._stage_find(team_id=team.id, domain=[('fold', '=', False)]).id @api.multi def _compute_attachment_number(self): """附件上傳""" attachment_data = self.env['ir.attachment'].read_group([('res_model', '=', 'tech.student'), ('res_id', ' in ', self.ids)], ['res_id'], ['res_id']) if len(attachment_data)>0: attachment = dict((data['res_id'], data['res_id_count']) for data in attachment_data) for expense in self: expense.attachment_number = attachment.get(expense.id, 0) @api.multi def action_get_attachment_view(self): """附件上傳動作檢視""" self.ensure_one() res = self.env['ir.actions.act_window'].for_xml_id('base', 'action_attachment') if res: res['domain'] = [('res_model', '=', 'tech.student'), ('res_id', ' in ', self.ids)] res['context'] = {'default_res_model': 'tech.student', 'default_res_id': self.id} return res # 增加附件上傳功能 attachment_number = fields.Integer(compute='_compute_attachment_number', string ='附件數量') name = fields.Char(u'名字') age = fields.Integer(u'年齡') sex = fields.Selection([('1',u'男'),('2',u'女')], string=u'性別') address = fields.Char(u'住址') phone = fields.Char(u'電話') email = fields.Char(u'電子郵箱') desc = fields.Text(u'描述') document = fields.Html(u'文件') sequence = fields.Integer(default=0,string=u'序號') perc_complete = fields.Float(u'% 萬年收入', (3, 2)) # Date fields: date_effective = fields.Date(u'出生日期') date_changed = fields.Datetime(u'修改日期') # Other fields: fold = fields.Boolean(default=True, help=u"是否轉正") image = fields.Binary(u'個人照片')
-
在views資料夾下,新建tech_student_views.xml
<?xml version="1.0"?>
<odoo>
<!-- tech.student views -->
<record id="tech_student_form" model="ir.ui.view">
<field name="name">tech.student.form</field>
<field name="model">tech.student</field>
<field name="arch" type="xml">
<form string="學生資訊">
<sheel>
<label for="name"></label>
<div class="oe_button_box" name="button_box">
<button name="action_get_attachment_view" class="oe_stat_button" icon="fa-book" type="object">
<field name="attachment_number" widget="statinfo" string="附件上傳"/>
</button>
</div>
<group>
<group string="基本資訊">
<field name="name"/>
<field name="age"/>
<field name="sex"/>
<field name="address"/>
<field name="phone"/>
<field name="email"/>
</group>
<group string="聯絡資訊">
<field name="sequence"/>
<field name="perc_complete"/>
<field name="date_effective"/>
<field name="date_changed"/>
<field name="fold"/>
<field name="image"/>
</group>
</group>
<group string="備註資訊">
<field name="document"/>
<field name="desc" />
</group>
</sheel>
</form>
</field>
</record>
<record id="tech_student_tree" model="ir.ui.view">
<field name="name">tech.student.tree</field>
<field name="model">tech.student</field>
<field name="arch" type="xml">
<tree string="Tech Student">
<field name="sequence"/>
<field name="phone"/>
<field name="name"/>
<field name="age"/>
<field name="sex"/>
<field name="address"/>
<field name="email"/>
</tree>
</field>
</record>
<record id="tech_student_action" model="ir.actions.act_window">
<field name="name">學生</field>
<field name="res_model">tech.student</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="menu_tech" name="學校管理" />
<menuitem id="menu_tech_stu" name="師生管理" parent="menu_tech"/>
<menuitem id="menu_tech_student" name="學生列表" parent="menu_tech_stu" action="tech_student_action"/>
</odoo>
然後重新啟動ODOO11的服務,可以檢視結果