python odoo-bin scaffold 插件名 路徑 # 例如 python odoo-bin scaffold hh_todo_app myaddons # 須要將myaddons的路徑添加到odoo.conf配置文件的addons_path參數中去
python odoo-bin scaffold huah_todo extra_addons
建立huah_todo addon在extra_addons,需將extra_addons的絕對路徑添加到debian/odoo.conf中的addons_path參數中前端
# -*- coding: utf-8 -*- { 'name': "huah_todo",# addons在應用欄中的展現名 # 摘要 'summary': """ Short (1 phrase/line) summary of the module's purpose, used as subtitle on modules listing or apps.openerp.com""", # 描述 'description': """ Long description of module's purpose """, # 做者 'author': "My Company", # 網站 'website': "http://www.yourcompany.com", # Categories can be used to filter modules in modules listing # Check https://github.com/odoo/odoo/blob/master/odoo/addons/base/module/module_data.xml # for the full list 'category': 'Uncategorized', 'version': '0.1', # any module necessary for this one to work correctly # 依賴組件,當繼承組件時須要編寫,當按照組件時會自動安裝依賴,卸載依賴組件時,該組件也會連帶卸載 'depends': ['base'], # always loaded # 容許加載的xml文件 'data': [ # 'security/ir.model.access.csv', 'views/views.xml',# 編寫視圖等xml文件 'views/templates.xml', ], # only loaded in demonstration mode 'demo': [ 'demo/demo.xml', ], }
# -*- coding: utf-8 -*- from odoo import models, fields, api import datetime class TaskInfo(models.Model): _name = 'huah_todo.taskinfo' # _name屬性對應該模型在數據庫中的表名 _rec_name = 'work_name' # _rec_name顯示模型對象時指定顯示的字段 work_name = fields.Char(u'工做項目',required=True) # 工做項目字段 work_content = fields.Text(u'工做內容',required=True) # 工做內容字段 # 工做任務開始時間,設置readonly只讀不可修改,默認爲當前時間 start_time = fields.Datetime(u'開始時間',default=lambda self:fields.Datetime.now(), readonly=True) # 結束時間,只讀字段,當更改任務狀態時纔會被修改 end_time = fields.Datetime(u'結束時間',readonly=True) # 累計用時,只讀字段,任務完成時,計算時間差 count_time =fields.Char(u'累計用時',readonly=True) # 任務狀態,選擇字段,默認未完成 status = fields.Selection([(1,u'已完成'),(2,u'未完成'),(3,u'已取消')], string=u'狀態',default=2) # 當前進度,text字段 current_process=fields.Text(u'當前進度') # 備註 remark = fields.Text(u'備註') @api.one # 接收一個form對象傳入self。 def work_done(self): """ 前端按綁定work_done方法,改變任務狀態並計算用時 :return: """ self.status=1 self.end_time=datetime.datetime.now() start_time=datetime.datetime.strptime(self.start_time,'%Y-%m-%d %H:%M:%S') end_time=datetime.datetime.strptime(self.end_time,'%Y-%m-%d %H:%M:%S') self.count_time=str((end_time-start_time).seconds//60)+'分鐘' return True
python odoo-bin scaffold命令建立的views.xml其實都註釋了編寫xml的示例python
<odoo> <data> <!-- explicit list view definition --> <!-- <record model="ir.ui.view" id="huah_todo.list"> <field name="name">huah_todo list</field> <field name="model">huah_todo.huah_todo</field> <field name="arch" type="xml"> <tree> <field name="name"/> <field name="value"/> <field name="value2"/> </tree> </field> </record> --> <!-- actions opening views on models --> <!-- <record model="ir.actions.act_window" id="huah_todo.action_window"> <field name="name">huah_todo window</field> <field name="res_model">huah_todo.huah_todo</field> <field name="view_mode">tree,form</field> </record> --> <!-- server action to the one above --> <!-- <record model="ir.actions.server" id="huah_todo.action_server"> <field name="name">huah_todo server</field> <field name="model_id" ref="model_huah_todo_huah_todo"/> <field name="code"> action = { "type": "ir.actions.act_window", "view_mode": "tree,form", "res_model": self._name, } </field> </record> --> <!-- Top menu item --> <!-- <menuitem name="huah_todo" id="huah_todo.menu_root"/> --> <!-- menu categories --> <!-- <menuitem name="Menu 1" id="huah_todo.menu_1" parent="huah_todo.menu_root"/> <menuitem name="Menu 2" id="huah_todo.menu_2" parent="huah_todo.menu_root"/> --> <!-- actions --> <!-- <menuitem name="List" id="huah_todo.menu_1_list" parent="huah_todo.menu_1" action="huah_todo.action_window"/> <menuitem name="Server to list" id="huah_todo" parent="huah_todo.menu_2" action="huah_todo.action_server"/> --> </data> </odoo>
<!-- Top menu item --> <!--每日事項的一級按鈕--> <menuitem name="每日事項" #按鈕的名字,用來顯示在主菜單 id="huah_todo.menu_root" # 按鈕惟一標示 action="huah_todo.taskinfo_window"/> #指定要執行的窗口id
<record model="ir.actions.act_window" id="huah_todo.taskinfo_window"> <field name="name">每日事項</field> # 窗口的名字 # 指定model,內容爲model的_name屬性 <field name="res_model">huah_todo.taskinfo</field> # 自動生成列表視圖和form視圖 <field name="view_mode">tree,form</field> </record>
<record model="ir.ui.view" id="huah_todo.taskinfo_tree_view"> # id 視圖的惟一標示 <field name="name">taskinfo_tree_view</field> # 視圖名,可隨意定義 <field name="model">huah_todo.taskinfo</field># # 指定模型 <field name="arch" type="xml"> # 聲明類型爲xml <tree> #tree標籤訂義要在tree視圖顯示的模型字段 <field name="work_name"/> <field name="start_time"/> <field name="end_time"/> <field name="status"/> <field name="current_process"/> </tree> </record>
全部的視圖都存在model="ir.ui.view"這張表裏。git
<record model="ir.ui.view" id="huah_todo.taskinfo"> <field name="name">taskinfo_form_view</field> <field name="model">huah_todo.taskinfo</field> <field name="arch" type="xml"> # 前幾行與tree視圖相似 <form># form標籤用於建立數據時顯示的字段 <header> # header標籤可定製按鈕功能 <button# button按鈕的name屬性綁定model的work_done方法 name="work_done" type="object" string="已完成" /> </header> <sheet> # sheet標籤包含單元顯示數據 <group># group標籤可將字段分組優化顯示 <field name="work_name"/> <field name="work_content"/> <field name="current_process"/> <field name="status"/> <field name="remark"/> </group> <group> <field name="start_time"/> <field name="end_time"/> <field name="count_time"/> </group> </sheet> </form> </field> </record>
運行示例:
tree視圖控制列表視圖要顯示的字段:
form視圖控制建立數據時的顯示:
點擊已完成按鈕會執行model的work_done方法修改結束時間和累計用時字段
github