本文主要是學(xué)習(xí)Odoo官方文檔 Building a Website文檔中的一些個(gè)人理解以及一些問(wèn)題和解決辦法弧蝇。用來(lái)頑固下學(xué)習(xí)碳褒,部分理解可能因?yàn)樗骄壒蕰?huì)有點(diǎn)偏差折砸,如果有錯(cuò)誤,歡迎指出共同學(xué)習(xí)沙峻。
Creating a basic module
- 任務(wù)通過(guò)建立模塊來(lái)執(zhí)行的
- 通過(guò)新增或者修改現(xiàn)有的模塊可以定制odoo的特性睦授。
$ ./odoo-bin scaffold Academy my-modules
這個(gè)命令自動(dòng)創(chuàng)建了一個(gè)my-modules的目錄(directory),里面包含著academy模塊(models)摔寨。
- 目錄可以是已經(jīng)存在的去枷,但是模塊名必須唯一。
A demonstration module
通過(guò)以下命令啟動(dòng)odoo服務(wù)器
$ ./odoo-bin --addons-path addons,my-modules
這條命令會(huì)把 addons和my-modules加到path里面去是复。
To the browser
- Controllers解析處理瀏覽器發(fā)來(lái)的請(qǐng)求(request),并返回響應(yīng)
Templates
Odoo允許使用任意python下的模板系統(tǒng),但是odoo自己附帶了一個(gè)模板系統(tǒng)QWeb.
模板xml文件要在
__manifest__.py
文件里面注冊(cè).
當(dāng)模塊有更新時(shí),需要重啟Odoo, 然后在網(wǎng)頁(yè)中通過(guò)點(diǎn)擊settings,然后在列表里面去掉apps標(biāo)簽,再搜索academy,點(diǎn)擊upgrade按鈕(與官方文檔中描述不同.個(gè)人版本為10.0).
或者
通過(guò)運(yùn)行$ odoo-bin --addons-path addons,my-modules -d academy -u academy
命令在重啟時(shí)候自動(dòng)更新.
Storing data in Odoo
Odoo 模型映射到數(shù)據(jù)庫(kù)的表.
通過(guò)設(shè)置
'security/ir.model.access.csv'
來(lái)為模型增加訪問(wèn)權(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
在這段代碼中,第一行分別列出了模型的屬性,以及訪問(wèn)權(quán)限 讀/寫(xiě)/新建/刪除.
第二行中需要注意的是group_id:id留空了,這代表這個(gè)訪問(wèn)控制的對(duì)象是全部用戶.
-note : 數(shù)據(jù)文件(Data files, XML或者CSV格式的)需要添加到__manifest__
里面. python文件(models和controllers)不需要添加到那個(gè)文件里面,但是需要被init.py文件引用.
-warning: 管理員用戶繞過(guò)訪問(wèn)控制删顶,即使未授予訪問(wèn)權(quán)限,他們也可以訪問(wèn)所有模型.
Demonstration data
數(shù)據(jù)文件可用于演示和非演示數(shù)據(jù)淑廊。演示數(shù)據(jù)僅以“演示模式”加載逗余,可用于流測(cè)試和演示,非演示數(shù)據(jù)始終加載并用作初始系統(tǒng)設(shè)置.
使用演示數(shù)據(jù)只是為了測(cè)試.
Accessing the data
-這里使用了一個(gè)ORM API里面的search()方法.
Website support
- 添加website作為academy的依賴.
- 在controller的route中增加website=true標(biāo)識(shí),這在請(qǐng)求對(duì)象中增加新標(biāo)識(shí),允許在模板中使用website布局.
URLs and routing
controller方法通過(guò)關(guān)鍵字 route()
裝飾器與路由相關(guān)聯(lián)季惩,路由字符串和多個(gè)屬性來(lái)定制其行為或安全性猎荠。
- Odoo提供了一個(gè)稱為模型的額外轉(zhuǎn)換器,當(dāng)給定它們的id時(shí)直接提供記錄
Field edition
對(duì)于記錄字段蜀备,模板可以使用特殊的t-field指令,該指令允許從網(wǎng)站編輯字段內(nèi)容荒叶。
t-field可以選擇顯示格式.
Administration and ERP integration
默認(rèn)情況下碾阁,Odoo模型基本上是用戶不可見(jiàn)的。要使其可見(jiàn)些楣,它必須通過(guò)一個(gè)操作脂凶,通常通過(guò)菜單來(lái)顯示。
模型關(guān)系 多對(duì)一(many2one) 一對(duì)多(one2many).
Discussions and notifications
在這章中按照官方教程無(wú)法運(yùn)行.會(huì)報(bào)錯(cuò)
'''
TypeError: Model 'academy.courses' inherits from non-existing model 'mail.thread'.
'''
不知道個(gè)人問(wèn)題還是官方教程疏漏了. 根據(jù)報(bào)錯(cuò)原因個(gè)人認(rèn)為可能里面_inherit = 'mail.thread'
需要mail模塊.但是直接在depends里面添加會(huì)提示找不到這個(gè)模塊.
后來(lái)在網(wǎng)頁(yè)apps里面添加之后再的depends添加就可以了.這是比較費(fèi)解的地方.
Selling courses
官網(wǎng)有些地方給的不是很詳細(xì),如果不明白哪里改動(dòng)了可以查看源碼目錄下doc里面的更改記錄.
但是跟著官方最后重啟Odoo時(shí)會(huì)報(bào)錯(cuò)
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">```
最后參考這個(gè)解決了. [[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"