odoo10 開發學習筆記2—簡單的請假模塊
在windows cmd命令行下:
e:ncd E:GOdoo10nE:GOdoo10runtimepythonpython sourceodoo-bin scaffold qingjia myaddonsn
E:GOdoo10 是odoo10綠色版的解壓目錄。
E:GOdoo10runtimepythonpython 這個是綠色版自帶的python環境,sourceodoo-bin 是odoo10源碼中的odoo命令入口,scaffold
是odoo的腳手架功能,可以創建一個標準的odoo模塊框架,qingjia是創建的模塊名,myaddons是模塊所放置的目錄路徑。模塊載入目錄有兩個,一個是GOdoo10myaddons,另一個是GOdoo10sourceaddons,但是按約定GOdoo10sourceaddons放系統模塊,GOdoo10myaddons放自己開發的模塊。請假單目錄結構
建立完成後,目錄是這樣的,這裡是用pycharm進行開發的,也可以用vs2015進行開發。
激活開發者模式
以管理員身份登錄系統,設置>激活開發者模式,odoo中很多操作和設置是需要管理員身份在開發者模式下才能進行的。
安裝請假模塊
應用>更新應用列表,更新應用列表是為了能夠搜索到剛剛添加的qingjia模塊。更新完成後,在搜索欄關閉「應用」標籤,然後輸入qingjia搜索,能看到我們的模塊了。安裝qingjia模塊,安裝完成後會發現什麼也沒增加,正常,因為腳手架中還沒有加入任何代碼。現在開始加入代碼,編輯文件__manifest__.py
# -*- coding: utf-8 -*-n{n name: "qingjia",nn summary: """n 請假模塊""",nn description: """n 請假模塊n """,nn author: "leo",n website: "http://www.yourcompany.com",nn # Categories can be used to filter modules in modules listingn # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xmln # for the full listn category: Uncategorized,n version: 0.1,nn # any module necessary for this one to work correctlyn depends: [base],nn # always loadedn data: [n # security/ir.model.access.csv,n views/views.xml,n views/templates.xml,n ],n # only loaded in demonstration moden demo: [n demo/demo.xml,n ],n}n
這是整個模塊的配置文件,配置項從字面上很容易理解。
name:模塊名,會顯示在模塊列表中。
summary:摘要,在模塊詳情顯示。
description:描述,在模塊詳情顯示。
depends:模塊依賴項,在這個模塊中沒有需要依賴的其它模塊,保留默認的base。
data:模塊資源文件,視圖、菜單、許可權等都可以寫在資源文件中。
demo:模塊演示數據。
修改模塊的類文件 models/models.py
from odoo import models, fields, apinnclass qingjiadan(models.Model):n _name = qingjia.qingjiadann name = fields.Char(string="申請人")n days = fields.Integer(string="天數")n startdate = fields.Date(string="開始日期")n reason = fields.Text(string="請假事由")n
這裡我們定義了qingjiadan對象模型,包含四個屬性,name,days,startdate,reason。在模塊安裝完成後,odoo的ORM框架會自動把這個對象映射到資料庫表。屬性類型會映射到表欄位數據類型,表名是模塊名_對象名,比如這個對象對應的表名是qingjia_qingjiadan
修改資源文件 views/views.xml
<odoo>n <data>n <!-- tree視圖 --> n <record id="view_tree_qingjia_qingjiadan" model="ir.ui.view">n <field name="name">請假單列表</field>n <field name="model">qingjia.qingjiadan</field>n <field name="arch" type="xml">n <tree>n <field name="name"/>n <field name="days"/>n <field name="startdate"/>n </tree>n </field>n </record> nn <!-- form視圖 -->n <record id="view_form_qingjia_qingjiadan" model="ir.ui.view">n <field name="name">請假單</field>n <field name="model">qingjia.qingjiadan</field>n <field name="arch" type="xml">n <form>n <sheet>n <group name="group_top" string="請假單">n <field name="name"/>n <field name="days"/>n <field name="startdate"/>n <field name="reason"/>n </group> n </sheet>n </form>n </field>n </record>nn <!-- 視圖動作 -->n <record model="ir.actions.act_window" id="qingjia.action_window">n <field name="name">請假單</field>n <field name="res_model">qingjia.qingjiad</field>n <field name="view_mode">tree,form</field>n </record>nn <!-- 頂級菜單 -->n <menuitem name="請假" id="menu_qingjia"/>nn <!-- 二級菜單 -->n <menuitem name="請假單" id="menu_qingjia_qingjiadan" parent="menu_qingjia" action="action_qingjia_qingjiadan"/>nn </data>n</odoo>n
這裡定義了一個tree視圖,一個form視圖,一個視圖動作,還有兩個菜單。
tree視圖用於顯示請假單列表頁面。
<record id="view_tree_qingjia_qingjiadan" model="ir.ui.view">n
id tree視圖的全局唯一標識
model 資源類型,tree視圖和form視圖都是ir.ui.view,這裡對應ir_ui_view資料庫表,模塊安裝後,資源數據會寫入對應的資料庫表中。
<field name="model">qingjia.qingjiadan</field>n
將這個視圖與我們之前定義的對象模型qingjia.qingjiadan進行綁定。
<field name="arch" type="xml">n <tree>n <field name="name"/>n <field name="days"/>n <field name="startdate"/>n </tree>n</field>n
這裡表示這是一個tree視圖,並定義列表項顯示的列。在列表項中顯示name,days,startdate三個欄位的內容,這裡欄位都是在qingjia.qingjiadan對象模型中定義的。
form視圖用於顯示請假單詳情頁,定義方式與tree視圖類似。有兩個特殊的容器<sheet><group>是用於頁面布局的。
<act_window_id="action_qingjia_qingjiadan"n name="請假單"n res_model="qingjia.qingjiadan"n view_mode="tree,form" />n
這裡定義視圖動作,視圖動作將菜單、視圖、模型進行關聯。
name 會在模塊的導航條中顯示
res_model 視圖動作綁定的模型
view_mode 視圖動作關聯的視圖類型
<!-- 頂級菜單 -->n <menuitem name="請假" id="menu_qingjia"/>nn <!-- 二級菜單 -->n <menuitem name="請假單" id="menu_qingjia_qingjiadan" parent="menu_qingjia" action="action_qingjia_qingjiadan"/>n
這裡定義了兩級菜單,頂級菜單將出現在odoo導航菜單上,二級菜單的通過parent屬性與頂級菜單關聯,action是菜單點擊動作響應方法。
模塊升級
修改完代碼後,重啟odoo服務,重新登錄系統,在應用>應用中再次找到我們之前安裝過的qingjia模塊,進入模塊詳情,把qingjia模塊升級。
請假單tree視圖
請假單form視圖
好了,現在可以看到請假模塊界面,能實現基本的增刪改查功能。
推薦閱讀:
※Scrapy爬蟲框架教程(二)-- 爬取豆瓣電影TOP250
※9、續7--文章的編寫頁面(略)
※為什麼python中不建議在for循環中修改列表?
TAG:Odoo原OpenERP | Python | 软件开发 |