數據文件?
Odoo 是一個高度數據驅動的系統,模塊定義的一個重要部分是各種記錄的定義:UI(菜單和視圖)、安全性(訪問權限和記錄規則)、報告和普通數據都是通過記錄來定義的。
結構?
在Odoo中定義數據的主要方式是通過XML數據文件:XML數據文件的大體結構如下:
根元素
odoo
內的任意數量操作元素
<?xml version="1.0" encoding="UTF-8"?>
<!-- the root elements of the data file -->
<odoo>
<operation/>
...
</odoo>
數據文件按順序執行,操作只能引用先前定義操作的結果
注解
如果數據文件的內容只需要應用一次,您可以指定odoo標志 noupdate
設置為1。如果文件中的部分數據只需要應用一次,您可以將文件的這部分放置在<data noupdate=”1”>域中。
<odoo>
<data noupdate="1">
<!-- Only loaded when installing the module (odoo-bin -i module) -->
<operation/>
</data>
<!-- (Re)Loaded at install and update (odoo-bin -i/-u) -->
<operation/>
</odoo>
核心操作?
record
?
record
適當地定義或更新數據庫記錄,它具有以下屬性:
field
?
每個記錄都可以由“field”標簽組成,定義在創建記錄時要設置的值。沒有“field”的“record”將使用所有默認值(創建)或不執行任何操作(更新)。
field
必須有一個必填的 name
屬性,用于設置字段名稱,以及各種方法來定義值本身:
- 無
如果沒有為字段提供值,則該字段將隱式設置為“False”??捎糜谇宄侄位虮苊馐褂米侄蔚哪J值。
search
-
將評估域,使用它搜索字段的模型,并將搜索結果設置為字段的值。如果字段是
Many2one
,則僅使用第一個結果。 ref
如果提供了
ref
屬性,則其值必須是有效的 外部標識符 ,將查找并設置為字段的值。type
如果提供了
type
屬性,則用于解釋和轉換字段的內容??梢酝ㄟ^file
屬性或節點正文提供字段的內容。可用類型為:
xml
,html
將
field
的子元素提取為單個文檔,評估任何使用形式為%(external_id)s
的 外部 ID 。%%
可用于輸出實際的 % 符號。file
確保字段內容是當前模型中有效的文件路徑,將
module,path
作為字段值保存char
直接將字段內容設置為字段的值,不進行修改
base64
將字段內容進行base64編碼,與
file
屬性結合使用,可將圖像數據加載到附件中int
將字段的內容轉換為整數并將其設置為字段的值
float
將字段內容轉換為浮點數并將其設置為字段的值
list
,tuple
應該包含任意數量的
value
元素,其屬性與field
相同,每個元素都解析為生成的元組或列表的一個項,生成的集合設置為字段的值
eval
對于前面的方法不適用的情況,
eval
屬性會簡單地評估提供的任何 Python 表達式,并將結果設置為字段的值。評估上下文包含各種模塊(
time
,datetime
,timedelta
,relativedelta
),一個用于解析 外部標識符 的函數(ref
)和當前字段的模型對象(如果適用)(obj
)
delete
?
delete
標簽可以刪除之前定義的任意數量的記錄。它具有以下屬性:
id
和 search
是互斥的
function
?
function
標簽調用模型上的方法,并提供參數。它有兩個必需的參數 model
和 name
,分別指定要調用的模型和方法的名稱。
可以使用 eval
(應該計算為要調用方法的參數序列)或 value
元素(請參見 list
值)來提供參數。
<odoo>
<data noupdate="1">
<record name="partner_1" model="res.partner">
<field name="name">Odude</field>
</record>
<function model="res.partner" name="send_inscription_notice"
eval="[[ref('partner_1'), ref('partner_2')]]"/>
<function model="res.users" name="send_vip_inscription_notice">
<function eval="[[('vip','=',True)]]" model="res.partner" name="search"/>
</function>
</data>
<record id="model_form_view" model="ir.ui.view">
...
</record>
</odoo>
快捷方式?
由于Odoo的一些重要結構模型比較復雜,數據文件提供了使用 記錄標簽 定義它們的更短的替代方案:
template
?
創建一個 QWeb 視圖 ,只需要視圖的 arch
部分,并允許一些 可選 屬性:
CSV數據文件?
XML數據文件靈活且自我描述,但在批量創建相同模型的多個簡單記錄時非常冗長。
對于這種情況,數據文件也可以使用csv,這在 訪問權限 中經常出現:
文件名為
model_name.csv
第一行列出要寫入的字段,其中特殊字段
id
用于 外部標識符 (用于創建或更新)每行之后創建一個新記錄
以下是定義國家省份的數據文件 res.country.state.csv
的前幾行:
"id","country_id:id","name","code"
state_au_1,au,"Australian Capital Territory","ACT"
state_au_2,au,"New South Wales","NSW"
state_au_3,au,"Northern Territory","NT"
state_au_4,au,"Queensland","QLD"
state_au_5,au,"South Australia","SA"
state_au_6,au,"Tasmania","TAS"
state_au_7,au,"Victoria","VIC"
state_au_8,au,"Western Australia","WA"
state_us_1,us,"Alabama","AL"
state_us_2,us,"Alaska","AK"
state_us_3,us,"Arizona","AZ"
state_us_4,us,"Arkansas","AR"
state_us_5,us,"California","CA"
state_us_6,us,"Colorado","CO"
以更易讀的格式呈現:
編號 |
國家ID:標識符 |
名稱 |
代碼 |
---|---|---|---|
state_au_1 |
au |
澳大利亞首都領地 |
ACT |
state_au_2 |
au |
新南威爾士州 |
NSW |
state_au_3 |
au |
北領地 |
NT |
state_au_4 |
au |
昆士蘭州 |
QLD |
state_au_5 |
au |
南澳大利亞州 |
SA |
state_au_6 |
au |
塔斯馬尼亞州 |
TAS |
state_au_7 |
au |
維多利亞州 |
VIC |
state_au_8 |
au |
西澳大利亞州 |
WA |
state_us_1 |
美國 |
阿拉巴馬州 |
AL |
state_us_2 |
美國 |
阿拉斯加州 |
AK |
state_us_3 |
美國 |
亞利桑那州 |
AZ |
state_us_4 |
美國 |
阿肯色州 |
AR |
state_us_5 |
美國 |
加利福尼亞州 |
加州 |
state_us_6 |
美國 |
科羅拉多州 |
CO |
對于每一行(記錄):