寫在前面:
接觸odoo已經兩年多了,在大學做課程設計的時候,無意間了解到odoo這個erp框架,當時的odoo在國內還默默無聞,我也不曾想過自己畢業后會從事到odoo框架的相關開發工作中來。兩年多的時間里,我見證了它在國內的發展,也隨着工作經驗的積累,對odoo已經有了一定的了解,在這里,我希望能分享自己兩年多來學習到的一些知識和經驗,也希望有可能吸引到更多的朋友加入到odoo的開發中來。
根據初步的想法,文章將會包含odoo開發環境的搭建(Mac),個性化,ORM模塊,controller,視圖、模板、記錄以及其繼承機制,widget,權限,打印模板,報表,部署,源碼分析等部分。關於更新時間,由於本人家境貧寒,每日上下班通勤時間高達三個小時,工作日能抽出的時間比較有限,主要將在周末更新。給自己定一個小目標,每周至少更新兩到三篇文章。

在Mac Os上安裝odoo12開發環境
我們將要安裝的軟件包:
1)、git: 代碼管理
2)、postgres: odoo12運行所需要的數據庫
3)、docker: 用於構建postgres容器,pgadmin4容器
4)、>=python3.5: odoo12運行的python環境
4)、odoo requirements: 運行odoo需要的python依賴包
項目代碼:
git clone -b v1.0 https://github.com/lingjiawen/odoo_project.git
1、安裝homebrew
打開終端,輸入:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2、安裝git
brew install git
安裝完成后,查看git版本檢查是否安裝成功:

3、安裝python3
最新款的mac已經自己安裝python2.7 和 python3.7,檢查運行版本:

如果沒有,使用homebrew進行安裝(homebrew安裝python3會自動安裝pip3):
brew install python3
4、安裝python虛擬環境
pip3 install virtualenv
查看是否安裝成功:

創建python3虛擬環境到用戶目錄並激活:
virtualenv -p python3 ~/odoo12_project #創建虛擬環境
source ~/odoo12_project/bin/active #激活虛擬環境

5、拉取代碼並安裝依賴:
mkdir -pv ~/code/odoo_project # 建立工作目錄 cd ~/code/odoo_project # 進入工作目錄 git clone -b 12.0 https://github.com/odoo/odoo.git
安裝所需依賴:
brew install freetype jpeg libpng libtiff xz webp brew install node # 安裝node npm install -g less less-plugin-clean-css #使用node安裝依賴 # 完成后進入odoo12目錄 cd odoo12 pip3 install -r requirements.txt # 安裝requirements
安裝pgcopy2可能會出現如下報錯:

可能的解決方法:
方法1:
pip3 uninstall psycopg2 pip3 list --outdated pip3 install --upgrade wheel pip3 install --upgrade setuptools pip3 install psycopg2
方法2:
xcode-select --install
如果上述兩種方法無法解決,那么嘗試下列辦法:
vim requirements.txt # 編輯文件 # 找到psycopg2 # 在前面添加'#'注釋 # 保存退出 pip3 install psycopg2-binary==2.8.3 # 手動安裝 # 重新安裝requirements pip3 install -r requirements.txt
6、安裝docker
直接訪問官網hub登錄下載docker桌面版並運行: https://hub.docker.com/editions/community/docker-ce-desktop-mac

查看docker和docker-compose版本:

7、使用docker安裝postgres數據庫
docker pull postgres:10
docker pull dpage/pgadmin4
進入項目路徑,創建db運行的docker-compose文件:
cd ~/code/odoo12_project/ touch docker-compose_db.yaml vim docker-compose_db.yaml
文件如下:
version: '2' services: postgres_10_db: image: postgres:10 container_name: postgres_10_db environment: - POSTGRES_USER=odoo12 - POSTGRES_PASSWORD=odoo12 - POSTGRES_DB=postgres - PGDATA=/var/lib/postgresql/data/pgdata volumes: - postgres_10_db_volume:/var/lib/postgresql/data/pgdata ports: - "5432:5432" network_mode: bridge volumes: postgres_10_db_volume: external: true
創建容器Volume並運行:
docker volume create --name=postgres_10_db_volume
docker-compose -f docker-compose_db.yaml up -d # 守護態運行
# 運行pgadmin, 賬號密碼請自己設置 docker run -p 8888:80 \ -e “PGADMIN_DEFAULT_EMAIL=sysadmin" \ -e “PGADMIN_DEFAULT_PASSWORD=sysadmin" \ -d dpage/pgadmin4
查看運行狀態:

我們已經注意到數據庫已經運行,端口為5432,pgadmin運行端口為8888,在瀏覽器輸入localhost:8888訪問pgadmin:

8、使用pycharm運行odoo12:
1)打開pycharm(如沒有pycharm請自行下載安裝,不再贅述),打開項目,如圖:
2)設置虛擬環境運行:
左上角點開pycharm->preferences->project->project interpreter->setting->add:

3)選擇existing environment,路徑選擇剛剛創建的odoo12_project/bin.python,點擊ok。

4)添加啟動文件:
在目錄下新建config目錄,在config目錄下新建odoo.conf文件:
[options] addons_path = ~/code/odoo12_project/odoo12/odoo/addons,~/code/odoo12_project/odoo12/addons ; admin_passwd = admin ; csv_internal_sep = , db_host = 0.0.0.0 db_password = odoo12 db_user = odoo12 db_port = 5432 ; db_maxconn = 64 ; db_name = False ; db_template = template1 ; dbfilter = .* ; debug_mode = False ; email_from = False ; limit_memory_hard = 2684354560 ; limit_memory_soft = 2147483648 ; limit_request = 8192 ;limit_time_cpu = 12000 ;limit_time_real = 24000 ; list_db = True ; log_db = False ; log_handler = [':INFO'] ; log_level = info ; logfile = None ; longpolling_port = 8072 ; max_cron_threads = 2 ; osv_memory_age_limit = 1.0 ; osv_memory_count_limit = False ; smtp_password = False ; smtp_port = 25 ; smtp_server = localhost ; smtp_ssl = False ; smtp_user = False ; workers = 5 ; xmlrpc = True ; xmlrpc_interface = ; xmlrpc_port = 8069 ; xmlrpcs = True ; xmlrpcs_interface = ; xmlrpcs_port = 8071
在主目錄下新建啟動文件set-up,並添加以下內容:
#!/usr/bin/env python3 # set server timezone in UTC before time module imported import os import sys __import__('os').environ['TZ'] = 'UTC' LIB_PATH = os.path.join(os.path.split(os.path.realpath(__file__))[0], '.', 'odoo12') sys.path.append(LIB_PATH) import odoo if __name__ == "__main__": odoo.cli.main()
最后目錄結構如下:

5)pycharm添加配置文件:


Script path: 選擇剛才建立的set-up文件;
Parameters:指定定配置文件,-c config/odoo.conf ;
Python interpreter:選擇剛才配置的虛擬環境;
6)點擊運行按鈕,我們可以看到odoo12已經在8069端口運行:

7)使用瀏覽器訪問localhost:8069查看效果:

Tips:下一篇文章將為大家帶來包含數據庫創建頁面的優化。
