Odoo模塊開發教程6-導入導出 CSV 數據文件第三講

添加模塊數據

模塊使用數據文件來加載默認數據、演示數據、用戶界面定義和其它需存入數據庫的配置。可以選擇使用 CSV 或 XML 文件。
“ 注意: Odoo 12 的修改Odoo 11 及之前版本支持 YAML 格式文件,但在 Odoo 12 移除了相關支持。相關使用示例可參考 Odoo 11 官方模塊 l10n_be,更多 YAML 格式相關信息,可訪問 http://yaml.org/。 ”
模塊所使用的 CSV 和我們前述使用導入功能時用的文件是一樣的。在模塊中使用這些文件時,文件名須與要導入數據的模型名一致。例如,導入 library.book 模型的 CSV 數據文件名應爲
library.book.csv。 CSV 數據文件經常用作導入 ir.model.access 模型來獲取權限定義,通常放在security/子目錄下並命名爲 ir.model.access.csv。

演示數據

Odoo 插件模塊可安裝演示數據,推薦支持該安裝。爲模塊提示使用示例和測試用的數據集會非常有用。模塊的演示數據通過__manifest__.py 文件中的 demo 屬性來聲明。和 data 屬性一
樣,後接一個包含模塊相對路徑的文件名列表。我們應爲 library.book 模塊添加一些演示數據,一個簡易方式是從安裝了模塊的開發數據庫中導出數據。按慣例數據文件放在 data/子目錄下,應以 data/library.book.csv 保存在 library_app 模塊下。因這個數據爲模塊所有,應在導出的數據中將標識符的前綴__export__去除。
例如 res.partner.csv 文件可能長這樣:
id,name
res_partner_alexandre,"Alexandre Fayolle"
res_partner_daniel,"Daniel Reis"
res_partner_holger,"Holger Brunn"
res_partner_packt,"Packt Publishing"
那麼圖書演示數據文件 library.book.csv 就應該是這樣的:
"id","name","date_published","publisher_id/id","author_ids/id"
library_book_ode11,"Odoo Development Essentials 11","2018-03-
01",res_partner_packt,res_partner_daniel
library_book_odc11,"Odoo 11 Development Cookbook","2018-01-
01",res_partner_packt,"res_partner_alexandre,res_partner
_holger"
注意文件中同一條數據因顯示原因可能在不同行中,但實際是不能換行的。還應記得在
__manifest__.py 的 demo 屬性中聲明數據文件:
'demo': [
'data/res.partner.csv',
'data/library.book.csv',
],
文件會以聲明的順序來加載,這個很重要,因爲文件可能會因爲未被安裝而無法引用其記錄。只要啓用了安裝演示數據,下次更新時,這些內容就會被導入。
“ 小貼士: 數據文件會在模塊升級時重新導入,但演示文件則並非如此,它們僅在安裝時導入。 ”
當然 XML 文件也可用於加載或初始化數據,還可使用普通 CSV 文件所不具備的功能。

使用 XML 數據文件

CSV 文件是一種展示數據方便簡潔的格式,但 XML 文件更爲強大,可在加載過程中提供更多的控制。比如,其文件名無需與所導入到的模型名稱一致。因爲 XML 格式通過文件內的 XML 元
素可以提供更豐富的信息、更多的內容。在前面的文章中我們已經使用過 XML 數據文件。視圖和菜單項這類用戶界面組件實際上都是存儲在系統模型中的記錄。模塊中的 XML 文件是將這些記錄加載到實例數據庫的方式。我們將在library_app 模塊中添加一個數據文件 data/book_demo.xml 來作爲展示,文件內容如下:

<odoo noupdate="1">
<!-- Data to load -->
<record model="res.partner" id="res_partner_huxley">
<field name="name">Aldous Huxley</field>
</record>
<record model="library.book" id="library_book_bnw">
<field name="name">Brave New World</field>
<field name="author_ids"
eval="[(4, ref('res_partner_huxley'))]" />
<field name="date_published">1932-01-01</field>
</record>
</odoo>

老規矩,新的數據文件應在__manifest__.py 中聲明:
'demo': [
...
'data/book_demo.xml',
],
類似 CSV 文件,該文件也會將數據加載到圖書模型中。
XML 文件包含一個外層元素,內部可包含多個元素與對應 CSV 數據行。
“ 小貼士: 數據文件中的外層元素在 9.0 中才引入用於替換此前的標籤。現在仍支持外層元素內的標籤,爲可選項。事實上現在和是等價的,我們可以在數據文件中使用任意一個作爲外層元素。 ”
元素有兩個強制屬性: model 和作爲記錄外部標識符的 id,每個字段使用一個標籤來進行寫入。注意此處字段名內不可使用斜槓標記,如不可使用。應使用 ref 屬性來引用外部標識符,一會兒就會討論到關聯 to-many 字段。
你可能注意到在外層元素中使用了 noupdate=” 1″屬性。這防止了在模塊升級時數據記錄的載入,不至於在後續編輯中丟失數據。

更多教程:https://www.erpdaxue.cn/odoo/odoo-teach/odoo12-teach/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章