1. 程式人生 > 其它 >odoo開發教程十一:檢視綜述

odoo開發教程十一:檢視綜述

一:檢視標籤等公共結構

  • name (必選) 用於通過名字查詢標籤
  • model: 與view相關聯的model
  • priority 當搜尋查詢view時,優先順序最低的view會被返回
  • arch 檢視layout的描述
  • groups_id 指定可檢視、使用檢視的使用者組id,many2many關係
  • inherit_id 當前檢視的父級檢視
  • mode 繼承模式,當inherit_id沒有設定時,它的值是primary,當設定了inherit_id後,它預設值是extension,可手動設定為primary
  • application 定義哪些檢視可以被切換,預設情況下所有檢視都可以

二:檢視繼承

一個定位元素組成,用來匹配父檢視中被繼承的元素 和 子檢視中會被用來修改的繼承元素
一共有三種用來匹配目標元素的定位元素:

  • 帶有expr屬性的xpath元素 ,expr是一個用在arch中的xpath表示式,找到的第一個節點就是匹配結果
  • 帶有name屬性的field元素,匹配第一個一樣name的field元素,其他的屬性在匹配時被忽略
  • 其他的元素:匹配第一個擁有一樣的name及其他屬性的元素(忽略position,version屬性)

通過可選的position屬性來指定如何修改匹配的節點

    • inside(預設) - 新增到匹配的節點前
    • replace - 替換匹配的節點
    • after - 新增到匹配的節點的父節點之後
    • before - 新增到匹配的節點的父節點之前
    • attributes - 繼承的內容是一系列擁有name屬性的attribute 元素,且有可選的內容主體
      1.如果attribute有內容主體,就在匹配的節點上新增以name命名的、以內容主體為值的屬性
      2.如果attribute沒有內容主體,就將匹配節點上名字為name的屬性刪除,如果沒有對應的屬性,丟擲一個錯誤

三:列表檢視

列表檢視的根元素是<tree>,它可以有以下幾種屬性:

editable

預設情況下選擇單行記錄時會開啟對應記錄的表單,該屬性讓資料可以在列表內進行編輯,有效的值是top和bottom,可讓新的記錄出現在列表的頂部或底部

default_order

重定義檢視的排序規則,以逗號分隔多個欄位,可使用desc來進行倒序<tree default_order="sequence,name desc">

decoration-name

可以根據值來改變欄位的顯示,$name可為bf (font-weight: bold), it (font-style: italic)或其他bootstrap樣式如danger, info, muted, primary, success,warning,取值為python表示式,對每條記錄執行相應表示式,當結果為true的時候將對應的樣式應用。

create, edit, delete

可以通過將它們設定為false來禁用檢視中的對應操作

on_write

只當啟用editable時有用,在呼叫時會傳給函式新增或修改後的記錄,該函式需要返回一個用於更新列表的記錄id列表。

tree檢視中的元素:

button

屬性列表:
1.icon -- 用來展示按鈕的圖示
2.string -- 當沒有icon的時候,button顯示的文字,有icon的時候、相當於alt屬性值
3.type -- 按鈕型別,表示點選它之後如何影響系統
1)workflow(預設):將按鈕name作為訊號傳送給工作流,記錄的內容作為引數
2)object : 呼叫當前資料列表模型的方法,方法名是按鈕的name,呼叫時帶有記錄id和當前上下文環境
3)action : 載入ir.actions,按鈕name是該action在資料庫的id,上下文環境擴充套件到列表的model(作為active_model)、當前記錄(active_id)、所有當前載入記錄的id(active_ids)
4.name,args 與type一樣
5.attrs 基於記錄值的動態屬性,將domain表示式應用在記錄上,當返回值為True的時候設定相應的屬性,一般用於invisible (隱藏按鈕)、readonly (禁用按鈕但顯示)這兩種屬性
6.states invisible屬性attrs的簡寫,給出一個以逗號分隔的state列表,需要模型有一個對應的state屬性,可以將不在state列表中的記錄的按鈕隱藏
7.context 當響應odoo的呼叫時,合併到檢視的上下文環境中
8.confirm 當點選按鈕時給出的確認訊息

field

屬性列表:
1.name 需要顯示的欄位名
2.string 該列的名稱
3.invisible 查詢而且儲存該欄位但不顯示
4.groups 可以看到該欄位的使用者組列表
5.widget 用來展示該欄位的可選形式

progressbar 進度條用於展示浮點數
many2onebutton當關聯欄位值存在時顯示勾,不存在顯示X
handle對於排序欄位,直接顯示向上向下箭頭
sum, avg 在底部顯示基於當前頁面資料的計算
attrs 基於記錄值的動態屬性,只對當前欄有效,即可以第一條記錄中該欄位顯示,第二條隱藏

field的值支援用eval語法來運算某個表示式獲得:例如:<field name="user_id" eval="ref('base.group_user')" />







四:表單檢視

1.notebook

定義一個tab塊,每一個tab通過一個page子元素定義,每個page可以有以下屬性:

  • string (required) --tab標籤的名稱
  • accesskey --html accesskey
  • attrs --基於記錄值的動態屬性

2.group

用於定義欄目在表單中佈局,預設情況下一個group定義兩個列,並且每個最直接的子元素佔用一個列,field型別的元素預設顯示一個標籤
group佔用的列數是可以通過col屬性自定義的,預設2個;其他元素可以通過colspan屬性來定義佔的列數,子元素是橫向佈局的,可以通過設定string 屬性來定義group所展示的標題

3.newline

只在group元素裡才有用,代表開啟新的行

4.separator

一條水平線,可以通過string屬性來設定該區域的標題

5.sheet

可以用作form的子元素用來表示更加狹義的表單

6.header

與sheet一起使用,顯示在sheet的上方的一個條,一般用於顯示工作流和狀態列

7.field

展示當前記錄的某個欄位,有以下屬性:

  1. name (必選) -- 用於展示欄位名
  2. widget -- 每個欄位根據其資料型別有一個預設的展示方式,widget屬性可指定用一個別的方式來展示
  3. options -- 用於指定widget欄位配置的json物件
  1. class -- 用於設定當前元素的html class屬性:
  2. oe_inline - 防止它自動將之後的欄位換行
    oe_left, oe_right - 相當於css的float浮動
    oe_read_only, oe_edit_only - 只在相應的模式下展示該欄位
    oe_no_button - 不為many2one欄位顯示導航按鈕
    oe_avatar - 當該欄位為圖片時,將它展示為頭像(90*90的正方形)
  1. groups - 只將該欄位展示給指定使用者組
  2. on_change - 在欄位值改變時呼叫對應方法,從8.0開始改用模型中的 odoo.api.onchange()
  3. attrs - 基於記錄值的動態引數
  4. domain - 當以選擇的方式顯示關聯欄位時,用過過濾資料
  5. context - 用於關聯欄位,顯示資料時提供上下文環境
  6. readonly - 該欄位可在讀和編輯模式下展示,但是永遠是不能編輯的
  7. required - 當該值沒有設定就儲存時給出一個錯誤提示並阻止儲存
  8. nolabel - 不顯示欄位的標籤,只有在該欄位是group子元素時用意義
  9. placeholder - 欄位值為空時展示的提示
  10. mode - 對於one2many欄位,用於展示其關聯的記錄的形式,有tree, form, kanban , graph,預設是tree
  11. help - 當將滑鼠放在欄位或標籤時顯示的提示
  12. filename - 對於二進位制的欄位,相關欄位給出檔名
  13. password - 表示該欄位是一個密碼,不明文展示

五:日曆檢視

日曆檢視按天、周、月來顯示資料,根元素是calendar,有以下屬性:

  • date_start (必選) -- 儲存開始時間的欄位
  • date_stop -- 儲存結束時間的欄位,當提供了該欄位時記錄可以直接在檢視中刪除
  • date_delay -- 與date_stop類似,表示的是該事件的持續時間
  • color -- 用於定義顏色的欄位,顏色欄位值相同的記錄會在檢視中以相同的顏色顯示
  • event_open_popup -- 以彈框代替表單來開啟事件,預設是禁用的
  • quick_add -- 允許快速新增事件,只需要提供name就行,當建立失敗時會轉到一個完整的表單彈出框
  • display -- 將欄位名用[]包裹展示
  • all_day -- 布林型,用來定義對應事件是否是全天有效
  • mode -- 預設的顯示模式:day, week, month

六:甘特圖

甘特圖用於展示甘特圖表,根元素是gantt,沒有子元素,但可以有以下屬性:

  • date_start (必選) -- 儲存開始時間的欄位
  • date_stop -- 提供結束時間的欄位,可以用date_delay來實現同樣的作用,兩者必須提供一個,如果該欄位被設定為False,那該事件的開始時間和結束時間是同個時間點
  • date_delay -- 提供事件持續時間的欄位
  • duration_unit -- 持續時間的單位,minute, hour (預設), day, week, month, year
  • default_group_by -- 任務分組的依據欄位
  • type -- gantt(預設) 傳統甘特圖、 consolidate(首個child的值被合併甘特圖任務中)、planning(children會自動顯示到甘特圖任務中)
  • consolidation -- 在記錄單元格中用於顯示合併值的欄位名
  • consolidation_max -- 資料字典,表示超過一定的值會標紅顯示 ,如:{"user_id": 100}
  • string -- 展示在合併值旁邊的字元,如果沒設定會自動取對應欄位的label
  • fold_last_level -- 如果設定了該屬性,最後一個分組級別會被摺疊
  • round_dnd_dates -- 開始和結束時間取整
  • drag_resize -- 任務調整,預設True

七:搜尋檢視

field

field使用使用者提供的值來定義domain表示式和上下文環境,當產生搜尋domain表示式後,會與field提供的表示式使用and進行合併作用,可有以下幾種屬性:

  • name -- 需要過濾的欄位名
  • string -- 欄位的label
  • operator -- 預設情況下field會生成[(name, operator, provided_value)]格式的表示式,其中name是欄位名,provided_value是使用者提供的值,operator屬性可以重寫預設的運算子(預設情況下是根據欄位型別分配,數字型是=,字元型是ilike)
  • filter_domain -- 用於搜尋的完整的domain表示式,可以用self變數來將提供的值注入,當operator和filter_domain同時賦值時,filter_domain有最高優先順序
  • context -- 允許新增上下文的值
  • groups -- 使該欄位只對某些使用者組可用
  • widget -- 使用指定的搜尋部件(唯一的用例是V8的many2one欄位選擇外掛)
  • domain -- 如果欄位提供自動完成時(many2one),過濾出可能的自動完成結果

filter

過濾器搜尋視圖裡是被預定義的,只能被啟用或禁用。主要用於將資料新增到搜尋的上下文環境或者新增新的片段到搜尋filter,有以下屬性:

  • string (required) -- 過濾器的label
  • domain -- 一個domain表示式,被新增到action的domain表示式中,作為搜尋的domain表示式一部分
  • context -- 一個python格式資料字典,被合併到action的domain表示式中,用於生成搜尋的domain表示式
  • name -- 過濾器的邏輯名
  • help -- 過濾器的描述文字
  • groups -- 指定過濾器可用的使用者組

separator

用於將多組過濾器分開,一般用於很簡單的視圖裡

group

也是用於分離多組過濾器,在複雜的檢視中比separator更加易讀

預設搜尋

搜尋欄位和過濾條件可以通過action的context使用search_default_name 配置,對於欄位就是需要搜尋的值,對過濾器它是一個布林值:

{
  'search_default_foo': 'acro',
  'search_default_bar': 1
}
#自動啟用bar過濾器,並在foo欄位搜尋acro