轉載請注明原文地址:https://www.cnblogs.com/ygj0930/p/10826414.html
TreeView:列表視圖
1:<tree>標簽的屬性
【tree標簽內的屬性,就是界面上的表現、行為,可以通過視圖繼承,往tree標簽增加屬性來自定義tree視圖的按鈕。】
列表視圖的根元素是<tree>
,它可以有以下幾種屬性:
1)editable
默認情況下選擇單行記錄時會打開對應記錄的表單,該屬性讓數據可以在列表內進行編輯,有效的值是top和bottom,可在列表的頂部或底部添加新記錄。
2)default_order
重定義視圖的排序規則,以逗號分隔多個字段,可使用desc來進行倒序<tree default_order="sequence,name desc">
3)decoration-樣式名
樣式可為 bf加粗, it斜體 或 其他bootstrap樣式如:danger紅色, info, muted, primary, success綠色,warning橙色等等,值為python表達式,對每條記錄執行相應表達式判斷,當結果為true的時候將對應的樣式應用。
也可以直接在標簽的css樣式值中使用表達式來動態設置,如設置顏色:
colors="gray:state=='cancel';red:state=='audit';green:state=='done';blue:state in('draft','confirm');"
4)create, edit, delete
可以通過將它們設置為false來禁用視圖中的對應操作按鈕:create對應創建按鈕、edit對應編輯按鈕、delete對應界面上 下拉菜單對 刪除 菜單項。
5)on_write
只當啟用editable時有用,在tree視圖新增或修改記錄時,會自動調用on_write屬性值對應對函數,並且會把新增/修改的記錄作為參數傳入【可以在該函數執行一些數據校驗、唯一性校驗】。該函數需要返回一個用於更新列表的記錄id列表。
6)繼承tree視圖,往tree標簽增加屬性,從而實現在tree界面上新增按鈕
2:tree視圖中的元素
【tree標簽之間等內容就是列表行內容。】
1)button標簽:定義一個按鈕,可以根據當前行某個字段值,動態控制行內按鈕的顯示或隱藏。按鈕通過跳轉到向導,context中會把對應行記錄的id作為active_id傳遞過去。
屬性列表: 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--按鈕的響應函數、工作流信號、action_id
5:args--傳遞給響應函數的參數 6.attrs 基於記錄值的某個字段值,將domain表達式應用在該行字段值上,當返回值為True的時候設置相應的屬性,一般屬性有 invisible (隱藏)、readonly (只讀但顯示) 7.states invisible屬性attrs的簡寫,給出一個以逗號分隔的state列表,需要模型有一個對應的state屬性,可以將不在state列表中的記錄的按鈕隱藏 8.context 作為額外的數據攜帶,在跳轉、函數調用時傳遞過去 9.confirm 當點擊按鈕時給出的確認消息
2)field字段標簽:顯示記錄的字段值
屬性列表: 1.name 字段名 2.string 該列頭的文本名稱,默認是字段名,可以在界面上自定義顯示名 3.invisible 查詢而且保存該字段,但界面上不顯示 4.groups 可以看到該字段的用戶組列表 5.widget 字段的展示形式: progressbar 進度條用於展示浮點數 many2onebutton當關聯字段值存在時顯示勾,不存在顯示X handle對於排序字段,直接顯示向上向下箭頭 sum, avg 在底部顯示基於當前頁面數據的求和或平均值 attrs 基於記錄值的動態屬性【屬性一般有兩個:invisible\readonly】,只對當前欄有效,即可以第一條記錄中該字段顯示,第二條隱藏,由domain表達式決定。
6.field的值支持用eval語法來運算某個表達式獲得:例如:<field name="user_id" eval="ref('base.group_user')" />