本文主要是學習Odoo官方文檔 Building a Website文檔中的一些個人理解以及一些問題和解決辦法。用來頑固下學習,部分理解可能因為水平緣故會有點偏差,如果有錯誤,歡迎指出共同學習。
Creating a basic module
- 任務(wù)通過建立模塊來執(zhí)行的
- 通過新增或者修改現(xiàn)有的模塊可以定制odoo的特性。
$ ./odoo-bin scaffold Academy my-modules
這個命令自動創(chuàng)建了一個my-modules的目錄(directory),里面包含著academy模塊(models)。
- 目錄可以是已經(jīng)存在的,但是模塊名必須唯一。
A demonstration module
通過以下命令啟動odoo服務(wù)器
$ ./odoo-bin --addons-path addons,my-modules
這條命令會把 addons和my-modules加到path里面去。
To the browser
- Controllers解析處理瀏覽器發(fā)來的請求(request),并返回響應(yīng)
Templates
Odoo允許使用任意python下的模板系統(tǒng),但是odoo自己附帶了一個模板系統(tǒng)QWeb.
模板xml文件要在
__manifest__.py文件里面注冊.
當模塊有更新時,需要重啟Odoo, 然后在網(wǎng)頁中通過點擊settings,然后在列表里面去掉apps標簽,再搜索academy,點擊upgrade按鈕(與官方文檔中描述不同.個人版本為10.0).
或者
通過運行$ odoo-bin --addons-path addons,my-modules -d academy -u academy命令在重啟時候自動更新.
Storing data in Odoo
Odoo 模型映射到數(shù)據(jù)庫的表.
通過設(shè)置
'security/ir.model.access.csv'來為模型增加訪問權(quán)限控制
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_academy_teachers,access_academy_teachers,model_academy_teachers,,1,0,0,0
在這段代碼中,第一行分別列出了模型的屬性,以及訪問權(quán)限 讀/寫/新建/刪除.
第二行中需要注意的是group_id:id留空了,這代表這個訪問控制的對象是全部用戶.
-note : 數(shù)據(jù)文件(Data files, XML或者CSV格式的)需要添加到__manifest__里面. python文件(models和controllers)不需要添加到那個文件里面,但是需要被init.py文件引用.
-warning: 管理員用戶繞過訪問控制,即使未授予訪問權(quán)限,他們也可以訪問所有模型.
Demonstration data
數(shù)據(jù)文件可用于演示和非演示數(shù)據(jù)。演示數(shù)據(jù)僅以“演示模式”加載,可用于流測試和演示,非演示數(shù)據(jù)始終加載并用作初始系統(tǒng)設(shè)置.
使用演示數(shù)據(jù)只是為了測試.
Accessing the data
-這里使用了一個ORM API里面的search()方法.
Website support
- 添加website作為academy的依賴.
- 在controller的route中增加website=true標識,這在請求對象中增加新標識,允許在模板中使用website布局.
URLs and routing
controller方法通過關(guān)鍵字 route()裝飾器與路由相關(guān)聯(lián),路由字符串和多個屬性來定制其行為或安全性。
- Odoo提供了一個稱為模型的額外轉(zhuǎn)換器,當給定它們的id時直接提供記錄
Field edition
對于記錄字段,模板可以使用特殊的t-field指令,該指令允許從網(wǎng)站編輯字段內(nèi)容。
t-field可以選擇顯示格式.
Administration and ERP integration
默認情況下,Odoo模型基本上是用戶不可見的。要使其可見,它必須通過一個操作,通常通過菜單來顯示。
模型關(guān)系 多對一(many2one) 一對多(one2many).
Discussions and notifications
在這章中按照官方教程無法運行.會報錯
'''
TypeError: Model 'academy.courses' inherits from non-existing model 'mail.thread'.
'''
不知道個人問題還是官方教程疏漏了. 根據(jù)報錯原因個人認為可能里面_inherit = 'mail.thread'需要mail模塊.但是直接在depends里面添加會提示找不到這個模塊.
后來在網(wǎng)頁apps里面添加之后再的depends添加就可以了.這是比較費解的地方.
Selling courses
官網(wǎng)有些地方給的不是很詳細,如果不明白哪里改動了可以查看源碼目錄下doc里面的更改記錄.
但是跟著官方最后重啟Odoo時會報錯
ParseError: "External ID not found in the system: website_sale.categ_others" while parsing /odoo/odoo-server/addons/academy/data.xml:4, near<record model="product.public.category" id="category_courses">```
最后參考這個解決了. [[Odoo 9.0 Website tutorial - Selling Courses](https://www.odoo.com/zh_CN/forum/help-1/question/odoo-9-0-website-tutorial-selling-courses-100267)](https://www.odoo.com/zh_CN/forum/help-1/question/odoo-9-0-website-tutorial-selling-courses-100267)
解決的辦法是
In data.xml file:
remove ref="website_sale.categ_others"