:環(huán)境搭建與模塊開發(fā)完整指南)
簡介Odoo 16按部就班實戰(zhàn)精解基礎篇是一套面向ERP初學者和Odoo二次開發(fā)者的視頻源碼配套資源覆蓋從基礎安裝、模塊創(chuàng)建到業(yè)務配置的完整路徑幫助讀者在缺少現(xiàn)場指導時也能按步驟完成Odoo 16環(huán)境搭建與功能定制。資源共包含554個文件以233個py后端邏輯源碼、202個xml視圖與菜單定義、43個mp4分階段操作錄屏為主輔以38個csv權限表和37張png界面截圖整包約461.73MB視頻與源碼按階段一一對應便于邊看邊練。實戰(zhàn)內容聚焦Odoo 16新增的庫存預測與保留釋放、供應商發(fā)票自動匹配、銷售流程優(yōu)化、集團集采SRM以及生產制造補貨策略等企業(yè)高頻場景每個模塊都給出可直接運行的Python模型和視圖配置可對接真實業(yè)務需求進行二次開發(fā)。目前已有253人學習下載無論作為系統(tǒng)學習Odoo的基礎教程還是快速了解新功能特性的參考手冊都能顯著降低上手門檻。1. Odoo 16 實戰(zhàn)不要跳步按部就班的前提是把環(huán)境當成系統(tǒng)來建把 Odoo 16 從零跑起來這件事我見過不少開發(fā)者在同一條路上卡住照著網上的片段裝到一半前端樣式丟失、模塊列表為空、視圖報字段找不到最后只能刪掉虛擬機重來。Odoo 16 是本地化部署場景里最常用的一代長期支持版本真正難的不是點擊鼠標配業(yè)務而是環(huán)境、配置、模塊骨架和數(shù)據視圖這四個環(huán)節(jié)必須按順序打通。這篇筆記就把這條鏈路拆成可復現(xiàn)的步驟裝在哪、怎么起、最小模塊怎么寫、常見坑在哪、調試怎么驗證。適合第一次接手 Odoo 16 的企業(yè) IT 和獨立開發(fā)者目標是讓你照著做一次跑通而不是把時間耗在排錯上。2. 裝在哪、怎么選Odoo 16 需要的最小環(huán)境2.1 版本選型為什么基礎篇只談 Odoo 16Odoo 16 屬于長期支持版本社區(qū)資料和第三方模塊積累都相對完整配置語法和視圖結構與 17、18 沒有本質差異但網上能搜到的中文排錯經驗明顯更多。對初學者來說追新版本不是不可以只是很多報錯在剛發(fā)的前半年連官方 issue 里都還沒有答案最后只能自己翻代碼屬于典型的“為了追新而翻車”。我看到很多團隊最后停留在 Odoo 16 的真實原因不是不思進取而是業(yè)務模塊跑在 16 上穩(wěn)定二次開發(fā)改動的面可控?;A篇選 16 還有一個技術理由它的 Python 依賴在 3.8 到 3.10 之間兼容性最好部署環(huán)境選型余地大不會因為系統(tǒng)自帶 Python 版本太新被迫升級一堆底層庫。版本選型上我不建議一上來就研究 Docker 鏡像的高可用方案。單機部署、源碼方式跑通這是把 Odoo 16 吃透的第一課。Docker 能幫你省去環(huán)境安裝但同時把配置目錄、文件存儲、進程管理變成黑匣子出了問題更難判斷是容器問題還是 Odoo 本身的問題。先本地裸跑再把同一套配置遷移到容器是比較穩(wěn)妥的路徑。對比項Odoo 16新版本社區(qū)資料與中文文檔多且穩(wěn)定偏少英文為主Python 版本兼容3.8 – 3.10要求更高版本第三方模塊覆蓋絕大多數(shù)場景夠用還在遷移中長期維護周期官方支持期長更依賴最新更新2.2 源碼方式安裝最小命令序列常見做法是在 Ubuntu 22.04 或 Debian 12 上裝 Odoo 16因為系統(tǒng)自帶 Python 版本合適PostgreSQL 安裝也簡單。我一般會創(chuàng)建一個獨立系統(tǒng)用戶來跑 Odoo而不是直接用 root一是避免文件權限混亂二是后續(xù)用 systemd 托管進程時更安全。下面的命令按順序執(zhí)行每一步都有依賴關系。# 更新系統(tǒng)包索引裝編譯和運行依賴 sudo apt update sudo apt install -y git python3 python3-pip python3-venv \ libpq-dev build-essential wget # 創(chuàng)建獨立用戶后面所有 Odoo 相關操作都在這個用戶下執(zhí)行 sudo useradd -m odoo16 # 從官方公開倉庫克隆 16.0 分支--depth 1 只拉取當前快照 sudo -u odoo16 git clone --depth 1 --branch 16.0 \ https://github.com/odoo/odoo.git /home/odoo16/odoo # 創(chuàng)建 Python 虛擬環(huán)境隔離項目依賴 sudo -u odoo16 python3 -m venv /home/odoo16/venv # 安裝 Odoo 的 Python 依賴requirements.txt 由官方維護 sudo -u odoo16 /home/odoo16/venv/bin/pip install -r \ /home/odoo16/odoo/requirements.txt克隆倉庫時我特意加了--depth 1它只保留最新一次提交克隆體積小、速度快。后面需要升級版本時再git fetch --depth 1即可對基礎篇完全夠用。虛擬環(huán)境這一步很多人偷懶跳過直接拿系統(tǒng) Python 跑結果裝了一堆全局包后續(xù)項目一多就亂。venv 是 Python 開發(fā)的基本衛(wèi)生習慣Odoo 16 也不例外。依賴安裝完成后建議先跑一次版本檢查確認環(huán)境沒壞。命令是/home/odoo16/venv/bin/python /home/odoo16/odoo/odoo-bin --version能正常輸出版本號就說明基礎依賴沒問題。如果報缺少某個模塊不要急著手動 pip 安裝先檢查是不是 requirements.txt 沒有全部裝上這種報錯多半是網絡中斷導致裝到一半。2.3 數(shù)據庫就緒PostgreSQL 用戶與權限Odoo 默認使用當前操作系統(tǒng)的用戶名去連接 PostgreSQL所以給系統(tǒng)用戶 odoo16 同名的數(shù)據庫用戶是最省心的配置。開發(fā)環(huán)境可以給超級權限生產環(huán)境建議只給 createdb 權限否則 Odoo 初始化時無法建庫。先安裝 PostgreSQL再創(chuàng)建用戶。sudo apt install -y postgresql # 創(chuàng)建與系統(tǒng)用戶同名的數(shù)據庫超級用戶 sudo su - postgres -c createuser -s odoo16 # 驗證能否以 odoo16 身份連接數(shù)據庫服務 sudo -u odoo16 psql -l-s表示超級用戶開發(fā)階段省去很多權限排查的麻煩。如果生產環(huán)境不想給超級權限可以用這條命令替代sudo su - postgres -c createuser -o odoo16 --createdb只授予建庫和創(chuàng)建角色權限。最終psql -l能列出數(shù)據庫列表就說明連接成功。數(shù)據庫這里最容易踩的坑是密碼問題。Odoo 配置文件里如果不寫db_password它默認用 Unix 本地連接的空密碼方式訪問 PostgreSQL這是正常配置不要手動填一個錯誤密碼進去。如果你非要用密碼連接必須在 PostgreSQL 里先給 odoo16 設置密碼然后兩邊保持一致不能只在配置文件里改。提示本地開發(fā)的數(shù)據庫操作都用 PostgreSQL 的 peer 認證Odoo 和數(shù)據庫跑在同一臺機器時配置里留空db_password是最穩(wěn)的做法。3. 把配置文件寫對Odoo 16 啟動前必須懂的參數(shù)3.1 一份能跑的最小配置Odoo 16 的配置是 ini 格式默認情況下不寫配置也能啟動但那樣會把數(shù)據庫和數(shù)據目錄放到奇怪的位置后期很難維護。我建議從第一次啟動就固定配置文件路徑我放在/etc/odoo16/odoo16.conf內容如下。這份配置是一個完整的最小集每行都有實際作用。[options] addons_path /home/odoo16/odoo/addons,/home/odoo16/my-addons data_dir /home/odoo16/odoo-data db_host 127.0.0.1 db_port 5432 db_user odoo16 db_password False dbfilter ^demo16$ web_interface 127.0.0.1addons_path是模塊搜索路徑多個目錄用逗號分隔。第一段是官方自帶模塊目錄第二段是自定義模塊目錄路徑里必須寫絕對路徑。data_dir用來存放附件、會話和靜態(tài)資源緩存我單獨建了/home/odoo16/odoo-data目錄避免和代碼目錄混在一起。db_host寫成127.0.0.1而不是 localhost是為了讓 Odoo 走 TCP 連接而不是 Unix socket配合db_password False時行為更穩(wěn)定。dbfilter是數(shù)據庫過濾正則^demo16$表示該實例只認 demo16 這一個數(shù)據庫這個參數(shù)在生產環(huán)境特別重要能防止 Odoo 界面里看到并連上服務器上其他不相關的庫。注意改了配置文件后必須重啟 Odoo 進程才會生效。很多人改完配置刷新頁面沒用就以為是文件寫錯了。3.2 首次啟動與數(shù)據庫初始化配置文件就緒后第一次啟動要完成數(shù)據庫初始化。這個步驟會創(chuàng)建數(shù)據庫結構并寫入基礎模塊Odoo 16 中基礎模塊不是選的而是初始化時默認安裝的。下面的命令執(zhí)行完不會卡在后臺它會初始化完自動退出方便看到所有日志輸出。sudo -u odoo16 /home/odoo16/venv/bin/python \ /home/odoo16/odoo/odoo-bin \ -c /etc/odoo16/odoo16.conf \ -d demo16 \ --stop-after-init-d demo16指定要初始化的數(shù)據庫名如果該數(shù)據庫不存在會自動創(chuàng)建前提是配置里的 db_user 有建庫權限。--stop-after-init是基礎篇必須記住的參數(shù)它讓 Odoo 完成初始化后立刻退出適合安裝、升級模塊時使用不會占住終端。等這條命令運行完再執(zhí)行不帶--stop-after-init的啟動命令。如果一切正常日志末尾會顯示 HTTP 服務在127.0.0.1:8069上監(jiān)聽瀏覽器訪問這個地址就能看到頁面。這里有個易錯點很多人第一次啟動直接用sudo -u odoo16跑后臺服務其實基礎篇階段前臺運行更好日志直接打在終端報錯能立刻看到。3.3 前端資源起不來樣式丟失與日志定位Odoo 16 的前端資源不是預編譯好隨代碼分發(fā)的web 客戶端首次啟動時會做靜態(tài)資源編譯。最常見的問題是打開頁面后完全沒有樣式控制臺一堆資源加載失敗。遇到這種情況先看啟動日志再檢查 data_dir 的權限。下面的命令把可能鉤住的兩個點都處理掉。# 創(chuàng)建數(shù)據目錄并授權給 odoo16 用戶 sudo mkdir -p /home/odoo16/odoo-data sudo chown -R odoo16:odoo16 /home/odoo16/odoo-data # 如果日志提示缺少 less 相關依賴重新完整安裝依賴 sudo -u odoo16 /home/odoo16/venv/bin/pip install -r \ /home/odoo16/odoo/requirements.txt # 查看日志最后 50 行定位是權限還是資源加載問題 sudo -u odoo16 tail -n 50 /home/odoo16/odoo16.log啟動 Odoo 時如果沒指定--logfile日志會直接打在終端。第一次跑通后建議加一個參數(shù)把它落到文件里比如--logfile/home/odoo16/odoo16.log排錯時不用一直掛著終端。樣式丟失的另一個根源是瀏覽器緩存了舊的靜態(tài)資源按 CtrlShiftR 強制刷新通常就能解決不必急著清數(shù)據目錄。日志里如果看到lessc或者node相關報錯說明前端編譯環(huán)境缺少 node 組件回到 2.2 節(jié)確認系統(tǒng)級的npm有沒有裝。這類問題網上常有人建議清空 data_dir 重啟但那屬于最后手段清掉的是附件和會話數(shù)據不是代碼數(shù)據一定要先確認日志內容再動手。4. 寫第一個自定義模塊Odoo 16 的最小可運行骨架4.1 模塊目錄與 manifest 骨架Odoo 16 的模塊就是一個帶固定結構的目錄目錄名是模塊技術名稱只能用小寫字母和下劃線。新建模塊不需要命令行工具手動建目錄就行結構如下。這個骨架是基礎篇最核心的東西后面所有業(yè)務邏輯都是在這個基礎上擴展出來的。my_first_module/ ├── __init__.py ├── __manifest__.py ├── models/ │ ├── __init__.py │ └── my_model.py └── views/ └── my_model_views.xml__manifest__.py是模塊的聲明文件告訴 Odoo 這個模塊是誰、依賴什么、要加載哪些數(shù)據文件。下面的內容是所有 Odoo 16 模塊的最小聲明字段名一個都不能拼錯否則安裝直接報錯。{ name: My First Module, version: 16.0.1.0.0, category: Tools, summary: 演示最小可運行模塊, depends: [base], data: [ views/my_model_views.xml, ], installable: True, application: True, }depends列表必須包含 base這是 Odoo 所有模塊的基礎依賴。data里聲明 XML 文件路徑Odoo 安裝模塊時會按列表順序加載這些文件。如果后續(xù)要加安全權限 CSV也要加到這里順序是先加權限文件再加視圖文件這個順序是硬性要求。4.2 模型定義一個帶名稱和描述的表模型是 Odoo 里處理業(yè)務數(shù)據的核心每個模型對應數(shù)據庫里的一張表。下面定義一個名為my.first.model的模型模型名用點分隔Odoo 會自動把它映射成數(shù)據庫表my_first_model。先寫模型文件再在models/__init__.py里導入。from odoo import models, fields class MyFirstModel(models.Model): _name my.first.model _description 我的第一個模型 name fields.Char(string名稱, requiredTrue) description fields.Text(string備注) active fields.Boolean(string有效, defaultTrue)name字段不是必須的但 Odoo 的列表視圖和搜索邏輯默認拿它做顯示名所以基礎模塊里最好帶上。active字段是 Odoo 的軟刪除機制值為 False 的記錄在普通視圖里默認不顯示這個字段幾乎是所有業(yè)務模型的標配。from . import my_modelmodels/__init__.py必須把新寫的模型文件導入Python 的類才能被 Odoo 注冊到模型系統(tǒng)里。很多新手改完my_model.py發(fā)現(xiàn)界面看不到新模型第一反應是代碼寫錯了實際上八成是忘了在這里加導入。這兩個文件寫完后先做一次升級操作再進界面接下來 4.3 節(jié)會說視圖這里先確認模型能建表。4.3 視圖與菜單XML 數(shù)據文件的作用Odoo 16 的界面是用 XML 數(shù)據文件定義的菜單、動作、視圖都是數(shù)據庫里的記錄。下面的 XML 定義一個窗口動作、一個頂級菜單和樹狀、表單兩種視圖。最外層標簽是odoo里面每條record都是一條寫入數(shù)據庫的記錄。odoo record idaction_my_first_model modelir.actions.act_window field namename我的模型/field field nameres_modelmy.first.model/field field nameview_modetree,form/field /record record idmenu_my_first_model modelir.ui.menu field namename我的模塊/field field namesequence10/field field nameaction refaction_my_first_model/ /record record idview_my_first_model_tree modelir.ui.view field namenamemy.first.model.tree/field field namemodelmy.first.model/field field namearch typexml tree string我的模型 field namename/ field nameactive/ /tree /field /record record idview_my_first_model_form modelir.ui.view field namenamemy.first.model.form/field field namemodelmy.first.model/field field namearch typexml form string我的模型 sheet group field namename/ field namedescription/ field nameactive/ /group /sheet /form /field /record /odooview_mode里的tree,form表示列表視圖優(yōu)先、表單視圖其次。上面這段 XML 里定義了自定義視圖但窗口動作還沒綁定它們所以實際打開的是 Odoo 自動生成的默認視圖。要讓自定義視圖生效需要在動作里加view_ids配置基礎篇階段建議先不配等你看過自動視圖長什么樣再回來替換成自己的布局。這里需要解釋一個容易誤解的點獨立定義一個視圖記錄并不會自動替換默認視圖它只是多了一條視圖配置。系統(tǒng)在渲染界面時會按model、type和優(yōu)先級找到最合適的視圖。想讓列表頁用自定義樹狀視圖最簡單的是等模塊裝好后在界面開發(fā)者模式里手動調整或者在本節(jié)代碼基礎上補全view_ids配置?;A篇先把記錄建起來、理解record和field的對應關系就足夠。4.4 安裝與升級循環(huán)讓改動生效的命令式寫法模塊寫好后把它放到配置的addons_path里指定的自定義目錄然后執(zhí)行安裝命令。Odoo 16 里安裝和升級是兩個不同的操作-i是安裝-u是升級。下面的命令先把模塊裝進 demo16 數(shù)據庫。sudo -u odoo16 /home/odoo16/venv/bin/python \ /home/odoo16/odoo/odoo-bin \ -c /etc/odoo16/odoo16.conf \ -d demo16 \ -i my_first_module \ --stop-after-init看到日志輸出module my_first_module: installing就說明模塊正在安裝。此刻打開瀏覽器菜單應該能出現(xiàn)了但注意如果你還沒配權限 CSV普通操作可能受限這是第 5 章要解決的問題。安裝完成后后續(xù)每次修改 Python 模型或者 XML 視圖都要執(zhí)行升級而不是重裝。sudo -u odoo16 /home/odoo16/venv/bin/python \ /home/odoo16/odoo/odoo-bin \ -c /etc/odoo16/odoo16.conf \ -d demo16 \ -u my_first_module \ --stop-after-initPython 模型字段改動后必須跑-u數(shù)據庫列才會同步創(chuàng)建。XML 視圖改動后同樣跑-u視圖記錄才會被重新加載。如果改了代碼不升級界面沒有任何變化這是 Odoo 開發(fā)里最常見的血淚經驗之一。我一般會養(yǎng)成習慣改完代碼立刻升級看到日志末尾沒有 ERROR 再切到界面驗證。5. 避坑Odoo 16 基礎實戰(zhàn)里的五個高頻報錯5.1 安裝模塊后菜單沒出現(xiàn)現(xiàn)象-i my_first_module執(zhí)行成功日志沒有報錯但登錄界面后整個側邊欄都找不到新菜單。原因最常見的是模型沒有權限記錄。Odoo 里新建模型后默認任何用戶都沒有讀寫權限界面里即使有菜單和動作點擊后也會報權限錯誤或者干脆不顯示。第二個常見原因是菜單記錄沒有配父級菜單頂欄里不會自動出現(xiàn)。解決在模塊里加一個權限文件security/ir.model.access.csv然后把它加進 manifest 的data。這是唯一標準的解決辦法。id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_my_first_model_all,my.first.model.all,model_my_first_model,,1,1,1,1model_id:id寫model_my_first_model這是 Odoo 根據模型自動生成的外部標識。group_id:id留空表示所有人可用。加完文件后重新升級模塊菜單才能正常使用。5.2 改了模型字段數(shù)據庫沒有新列現(xiàn)象在my_model.py里新增了一個字段升級模塊后進入界面系統(tǒng)報字段不存在或者數(shù)據庫查詢出錯。原因改完 Python 模型沒有執(zhí)行-u升級或者升級時數(shù)據庫連接配置不對導致建列失敗。Odoo 不會在你修改代碼后自動同步數(shù)據庫表結構它只在升級模塊時對比模型定義和實際表結構。解決執(zhí)行 4.4 節(jié)的升級命令。升級過程中日志會把每個模型的字段變更打出來如果沒有看到你的新字段說明模塊路徑不對檢查addons_path和模塊目錄名是否一致。注意有些開發(fā)者圖省事直接重啟服務不升級模塊這樣永遠不會生效。在 Odoo 16 里改 Python 模型字段后重啟服務 刷新頁面是錯誤的調試路徑。5.3 視圖報錯Field xxx not found現(xiàn)象升級模塊時直接報錯Field description does not exist或者類似的字段不存在錯誤模塊無法完成安裝。原因XML 視圖里寫了模型沒有的字段名稱或者模型類沒有被正確導入Odoo 在加載視圖時找不到對應的字段定義。解決先把 XML 里所有field標簽的name屬性和模型文件里的字段定義逐行對照。再看一眼models/__init__.py有沒有把模型模塊 import 進來。最后確認depends里包含 base如果視圖里引用了其他模塊的模型還要在 manifests 里加對應依賴。這個報錯是新手最容易怕的類型其實排查路徑非常固定字段名 → import → 依賴。5.4 addons_path 只寫了一個路徑自己模塊永遠不可見現(xiàn)象在瀏覽器應用列表里找不到my_first_module安裝模塊下拉列表為空或者只有系統(tǒng)自帶模塊。原因配置文件里的addons_path只寫了官方模塊目錄/home/odoo16/odoo/addons自定義模塊目錄沒有加入。Odoo 不會自動遞歸掃描其他位置的模塊。解決確保配置里用逗號同時列出兩個路徑并重啟服務。這是修改配置文件后必須做的一步重啟 Odoo 進程重新讀取配置再進應用列表搜索模塊。addons_path /home/odoo16/odoo/addons,/home/odoo16/my-addons這里有個排查技巧啟動 Odoo 時加--log-leveldebug日志里會輸出所有已加載模塊的列表。如果自定義目錄下的模塊沒出現(xiàn)檢查模塊目錄下有沒有__manifest__.py以及該文件是否能被 Python 正常解析json格式錯誤會導致整個模塊被靜默跳過。5.5 前端資源錯亂沒有樣式部分按鈕不斷加載現(xiàn)象頁面能打開但完全沒有 CSS 樣式列表頁和表單頁布局混亂一些按鈕點擊后一直轉圈沒有響應。原因data_dir 里的靜態(tài)資源緩存損壞或不完整或者數(shù)據目錄權限不足Odoo 無法正常生成前端資源。這類問題在反復重啟、物理機斷電后較容易出現(xiàn)。解決第一步確認 data_dir 歸屬用戶是 odoo16。第二步清理殘舊資源這是基礎篇階段最直接的方法只在開發(fā)環(huán)境做生產環(huán)境要謹慎清數(shù)據。sudo -u odoo16 rm -rf /home/odoo16/odoo-data/filestore sudo -u odoo16 rm -rf /home/odoo16/odoo-data/sessions清理后重啟 Odoo讓它重新生成全部靜態(tài)資源。如果你部署的實例已經跑了一段時間里面可能有上傳附件清掉 filestore 會丟失這些文件所以這個操作只適合本地開發(fā)庫。先排查日志和權限不要一上來就清數(shù)據目錄這樣容易把沒有問題的附件也一起誤刪。6. 用調試與數(shù)據復位把 Odoo 16 開發(fā)節(jié)奏拉起來6.1 日志內聯(lián)與 debug 模式基礎篇后期你應該把啟動命令固定成帶日志文件的寫法日志是 Odoo 16 排錯的第一信息來源。下面這條命令會輸出比默認更詳細的日志包括 SQL 查詢和視圖加載過程遇到權限和字段問題時比猜代碼高效得多。sudo -u odoo16 /home/odoo16/venv/bin/python \ /home/odoo16/odoo/odoo-bin \ -c /etc/odoo16/odoo16.conf \ -d demo16 \ --logfile/home/odoo16/odoo16.log \ --log-leveldebug--log-leveldebug會輸出大量細節(jié)生產環(huán)境不建議開本地開發(fā)時開起來能讓很多隱蔽問題現(xiàn)形。瀏覽器端還有一個技巧把登錄地址換成http://127.0.0.1:8069/web?debug1頁面右上角會多出調試菜單可以直接查看視圖層級和模型字段特別適合對照 XML 檢查界面結構。6.2 用測試文件驗證字段約束基礎篇的模塊還沒有復雜邏輯但可以把驗證方式提前養(yǎng)成測試習慣。在模塊下建tests/__init__.py和tests/test_my_model.py寫一個最小測試用例檢查模型創(chuàng)建和必填字段約束。from odoo.tests import Common class TestMyModel(Common): def test_name_create(self): rec self.env[my.first.model].create({name: demo}) self.assertEqual(rec.name, demo)運行測試用下面的命令--test-tags指定模塊名只跑當前模塊的測試不會把整個庫的測試全部跑一遍。sudo -u odoo16 /home/odoo16/venv/bin/python \ /home/odoo16/odoo/odoo-bin \ -c /etc/odoo16/odoo16.conf \ -d demo16 \ --test-enable \ --test-tags my_first_module \ --stop-after-init輸出里出現(xiàn)Tests: 1就說明測試生效了。我自己的經驗是測試不一定要覆蓋所有邏輯但至少把創(chuàng)建、讀取、字段約束這類基礎路徑守住。這樣每次改完模型跑一次測試比反復手工點界面確認要踏實得多。6.3 數(shù)據復位刪庫重建而不是清數(shù)據庫開發(fā)和調試到后期demo16 庫里會堆積大量實驗數(shù)據繼續(xù)在這個庫里升級模塊可能產生各種奇怪殘留。最干凈的復位方法是直接把數(shù)據庫刪掉重建再初始化一次。這個習慣能避免很多玄學問題庫是全新結構所有模塊都是重新安裝狀態(tài)可控。sudo -u postgres dropdb demo16 sudo -u postgres createdb demo16 -O odoo16重建后執(zhí)行第 3 章的初始化命令然后重新安裝模塊。整個過程一分鐘不到換來的是一個完全干凈的驗證環(huán)境。我早期在同一個庫里反復升級遇到字段殘留問題經常要翻舊賬后來改成“先 dropdb 再重來”反而省下大量時間。Odoo 16 基礎階段的代碼量不大刪庫重建沒有任何心理負擔等真正進入業(yè)務數(shù)據階段再來考慮數(shù)據庫遷移和備份方案。希望這篇筆記能幫你把 Odoo 16 的入門路徑走成一條明確可復現(xiàn)的鏈路不靠運氣跑通也不在排錯上反復徘徊。本文還有配套的精品資源點擊獲取