1. 程式人生 > >odoo10學習筆記十一:視圖綜述

odoo10學習筆記十一:視圖綜述

當前 存在 ren name屬性 簡寫 ann idg 重寫 ogre

原文地址:http://www.cnblogs.com/ygj0930/p/7150983.html

一:視圖標簽等公共結構

  • 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

odoo10學習筆記十一:視圖綜述