1. odoo的基本視圖結構 基本視圖通常共享下面定義的公共結構。占位符用全大寫表示。
< record id = " MODEL_view_TYPE" model = " ir.ui.view" > < field name = " name" > NAME
</ field> < field name = " model" > MODEL
</ field> < field name = " arch" type = " xml" > < VIEW_TYPE> < VIEW_SPECIFICATIONS/> </ VIEW_TYPE> </ field>
</ record>
2.字段 視圖對象公開許多字段。它們是可選的,除非另有說明。
name —>char:只有在從某種類型的列表中查找視圖時,才可用作視圖的助記符/描述。
model —>char:模型鏈接到視圖,如果適用的話。
priority —>Integer:當視圖被(model, type)請求時,將返回與模型和類型匹配且優先級最低的視圖(這是默認視圖)。它還定義了視圖繼承期間視圖應用程序的順序。
groups_id —>Many2many: odoo.addons.base.models.res_users.Groups 組允許 use/access 當前視圖。 如果視圖擴展了一個現有視圖,那么只有當用戶能夠訪問提供的groups_id時,該擴展才會應用于給定的用戶。
arch —> Text:視圖布局的描述。
3.屬性 不同的視圖類型有各種各樣的屬性,允許對通用行為進行定制。這里將解釋一些主要屬性。它們并不是對所有視圖類型都有影響。 ps:當前上下文和用戶訪問權限也可能影響查看能力。
create:在視圖上 禁用/啟用 記錄創建。 edit (form & list & gantt) : 在視圖上 禁用/啟用 記錄版本。 delete (form & list) : 通過Action下拉菜單 禁用/啟用 視圖上的記錄刪除。 duplicate (form & list) : 通過操作下拉菜單禁用/啟用視圖上的記錄復制 decoration-$ (list & gantt) : 根據相應記錄的屬性,以行文本的樣式定義記錄的條件顯示。值是Python表達式。對于每個記錄,表達式將使用記錄的屬性作為上下文值進行計算,如果為真,相應的樣式將應用于行。其他上下文值是uid(當前用戶的id)和current_date(當前日期作為YYYY-MM-DD格式的字符串)。
< tree decoration-info = " state == ' draft' " decoration-danger = " state == ' help_needed' " decoration-bf = " state=' busy' " > < TREE_VIEW_CONTENT>
</ tree>
banner_route: 要獲取并預先添加到視圖中的路由地址。 如果設置了這個屬性,控制器路由url將被獲取并顯示在視圖之上。來自控制器的json響應應該包含一個“html”鍵。 如果html包含一個樣式表< link >標簽,它將被移除并附加到 < head > 只有擴展了AbstractView和AbstractController的視圖才能使用這個屬性,比如表單、看板、列表…… Example:
< tree banner_route = " /module_name/hello" />
class MyController ( odoo
. http
. Controller
) : @http
. route
( '/module_name/hello' , auth
= 'user' , type = 'json' ) def hello ( self
) : return { 'html' : """<div><link href="/module_name/static/src/css/banner.css"rel="stylesheet"><h1>hello, world</h1></div> """ }
4.繼承 繼承的字段: 下面兩個視圖字段用于指定繼承的視圖
inherit_id , Many2one 前視圖的父視圖,默認情況下未設置。使用ref屬性指定父節點
< field name = " inherit_id" ref = " library.view_book_form" />
mode Selection: extension / primary 繼承模式,如果設置了inherit_id,則默認為擴展,否則為primary。 當使用inherit_id時,你想覆蓋模式的一個例子是委托繼承。在這種情況下,你的派生模型將與它的父模型分離,與一個視圖匹配的視圖將不會與另一個匹配。假設您從與父模型關聯的視圖中繼承,并希望自定義派生視圖以顯示來自派生模型的數據。派生視圖的模式需要設置為primary,因為它是派生模型的基礎(可能是唯一的)視圖。否則視圖匹配
5.視圖匹配
如果視圖是由(model, type)請求的,則匹配具有正確的模型和類型、mode=primary和最低優先級的視圖。 當視圖被id請求時,如果它的模式不是主模式,則匹配與主模式最接近的父模式。
6.視圖區別/分辨 視圖的區別主要是生成不同類型的視圖
如果視圖有父視圖,則父視圖被完全解析,然后應用當前視圖的繼承規范 如果視圖沒有父視圖,則按原樣使用其arch 使用模式擴展查找當前視圖的子視圖,并應用它們的繼承規范深度優先(應用子視圖,然后應用其子視圖,然后應用兄弟視圖)。
應用子視圖的結果產生最終的arch
7.繼承規格 繼承規范由元素定位器和子元素組成,前者與父視圖中的繼承元素相匹配,后者將用于修改繼承元素。 下面是匹配目標元素的三種類型的元素定位器:
帶有expr屬性的xpath元素。expr是應用于當前arch的XPath表達式1,它找到的第一個節點是匹配的 具有name屬性的字段元素匹配具有相同名稱的第一個字段。在匹配過程中忽略所有其他屬性 任何其他元素:匹配具有相同名稱和相同屬性(忽略位置和版本屬性)的第一個元素
< xpath expr = " page[@name=' pg' ]/group[@name=' gp' ]/field" position = " inside" > < field name = " description" />
</ xpath> < field name = " res_id" position = " after" /> < div name = " name" position = " replace" > < div name = " name2" > < field name = " name2" /> </ div>
</ div>
繼承規范可以有一個可選的position屬性來指定如何改變匹配的節點:
inside (default):繼承的內容被附加到匹配的節點 replace:繼承的內容替換匹配的節點。任何在規范內容中只包含$0的文本節點都將被匹配節點的完整副本替換,從而有效地包裝匹配節點 after:繼承的內容被添加到匹配節點的父節點,在匹配節點之后 before:繼承的內容在匹配節點之前被添加到匹配節點的父節點 attributes:繼承的內容應該是帶有name屬性和可選主體的屬性元素: 如果屬性元素有一個body,則在匹配的節點上創建一個以其名稱命名的新屬性,屬性元素的文本作為值 如果屬性元素沒有主體,則以其名稱命名的屬性將從匹配節點中刪除。如果不存在這樣的屬性,則會引發錯誤
< field name = " sale_information" position = " attributes" > < attribute name = " invisible" > 0
</ attribute> < attribute name = " attrs" > {'invisible': [('sale_ok', '=', False)], 'readonly': [('editable', '=', False)]}
</ attribute>
</ field>
move 可以作為繼承規范的直接子元素,帶有“inside”、“replace”、“after”或“before” position 屬性來移動節點。
< xpath expr = " //@target" position = " after" > < xpath expr = " //@node" position = " move" />
</ xpath> < field name = " target_field" position = " after" > < field name = " my_field" position = " move" />
</ field>
8.View types:視圖的類型
Activity 活動視圖):用于顯示鏈接到記錄的活動。數據顯示在一個圖表中,記錄構成行,活動類型構成列。每行的第一個單元格顯示一張(可自定義的,參見模板,與看板非常類似)卡片,表示相應的記錄。當單擊其他單元格時,記錄中相同類型的所有活動的詳細描述將顯示出來。
Activity視圖的根元素是< Activity >,它接受以下屬性:string :一個標題,用它描述視圖視圖的子元素有:field:聲明要在活動邏輯中使用的字段。如果字段只是簡單地顯示在activity視圖中,則不需要預先聲明它。name (required)要獲取的字段的名稱。templates:定義QWeb模板。為了清晰起見,卡片定義可以拆分為多個模板,但是活動視圖必須定義至少一個根模板活動框,它將為每個記錄呈現一次。activity視圖使用標準的javascript qweb,并提供了以下上下文變量。widget:當前的ActivityRecord()可以用來獲取一些元信息。這些方法也可以直接在模板上下文中使用,不需要通過小部件訪問record:具有所有請求字段作為其屬性的對象。每個字段有兩個屬性value和raw_value
Calendar 日歷視圖):日歷視圖將記錄顯示為每日、每周或每月日歷中的事件。它們的根元素是。日歷視圖上的可用屬性是
date_start (required):保存事件開始日期的記錄字段的名稱date_stop:保存事件結束日期的記錄字段的名稱,如果提供了date_stop,則記錄可以在日歷中直接移動(通過拖放)date_delay:替代date_stop,提供事件的持續時間,而不是結束日期(單位:天)color:用于顏色分割的記錄字段的名稱。在同一顏色段的記錄被分配在日歷上相同的高光顏色,顏色是半隨機分配的。在側欄中顯示可見記錄的display_name/avatarform_view_id:視圖以在用戶創建或編輯事件時打開。請注意,如果沒有設置此屬性,如果當前操作中有表單視圖,那么日歷視圖將回落到表單視圖的id。event_open_popup:如果選項' event_open_popup '被設置為true,那么日歷視圖將在FormViewDialog中打開事件(或記錄)。否則,它將在新表單視圖中打開事件(帶有do_action)quick_add:啟用單擊時快速事件創建:只詢問用戶名稱,并嘗試創建一個新的事件,僅使用該名稱和單擊事件時間。如果快速創建失敗,將返回到完整的表單對話框all_day:記錄上布爾字段的名稱,該名稱指示是否將相應的事件標記為day-long(與持續時間無關)mode:加載日歷時的默認顯示模式。可能的屬性是:day、week、month
< field> :聲明要聚合或在看板邏輯中使用的字段。如果字段僅僅顯示在日歷卡中。字段可以有額外的屬性:* invisible :使用“True”來隱藏卡片中的值* avatar_field:僅對x2many字段,顯示頭像而不是卡片中的display_name* write_model 和 write_field:您可以添加篩選器并將結果保存到定義的模型中,該篩選器將添加到側欄中
Cohort 視圖 Cohort視圖 用于顯示和理解一些數據在一段時間內的變化方式。例如,假設對于給定的業務,客戶端可以訂閱某些服務。隊列視圖可以顯示每個月的訂閱總數,并研究客戶離開服務的速率(churn)。當點擊一個單元格時,隊列視圖將重定向到一個新的動作,在這個動作中,你將只能看到包含在單元格的時間間隔中的記錄;該操作包含一個列表視圖和一個表單視圖。
< cohort string = " Subscription" date_start = " date_start" date_stop = " date" interval = " month" />
屬性:
string (mandatory):一個標題,描述視圖
date_start (mandatory):有效的日期或日期時間字段。視圖將此字段理解為記錄的開始日期
date_stop (mandatory):有效的日期或日期時間字段。視圖將此字段理解為記錄的結束日期。這是將決定流失率的字段。
mode (optional):用于描述模式的字符串。它應該是“流失率”或“留存率”(默認)。流失率模式將從0%開始并隨著時間的推移而累積,而留存率將從100%開始并隨著時間的推移而減少。
timeline (optional):用于描述時間軸的字符串。它應該是“向后”或“向前”(默認)。向前時間軸將顯示數據從date_start到date_stop,而向后時間軸將顯示數據從date_stop到date_start(當date_start在future /大于date_stop)。
interval (optional):用于描述時間間隔的字符串。應該是' day ', ' week ', ' month '(默認)或' year '。
measure (optional):可以聚合的字段。此字段將用于計算每個單元格的值。如果沒有設置,隊列視圖將計算出現的次數。
Dashboard 視圖 與pivot和graph視圖一樣,儀表板視圖也用于顯示聚合數據。然而,儀表板可以嵌入子視圖,這使得在給定數據集上有一個更完整和有趣的外觀成為可能。儀表板視圖可以顯示子視圖、某些字段的聚合(在一個域上),甚至公式(涉及一個或多個聚合的表達式)。例如,這是一個非常簡單的儀表盤:
< dashboard> < view type = " graph" ref = " sale_report.view_order_product_graph" /> < group string = " Sale" > < aggregate name = " price_total" field = " price_total" widget = " monetary" /> < aggregate name = " order_id" field = " order_id" string = " Orders" /> < formula name = " price_average" string = " Price Average" value = " record.price_total / record.order_id" widget = " percentage" /> </ group> < view type = " pivot" ref = " sale_report.view_order_product_pivot" />
</ dashboard>
儀表板視圖的根元素是< Dashboard >,它不接受任何屬性。
在儀表板視圖中有5種可能的標簽類型:view group aggregate formula widget
每個標簽又有很多屬性詳情查閱:https://www.odoo.com/documentation/13.0/reference/views.html#dashboard
Diagram 視圖:圖表視圖 diagram視圖可用于顯示記錄的有向圖。根元素是,沒有屬性。 圖視圖可能的子視圖有:
node (required, 1):屬性有:object/shape/bgcolor
arrow (required, 1):屬性有:object (required)/source (required)/destination (required)/label
label:對于圖表,string屬性定義了注釋的內容。每個標簽在圖表頭部作為一個段落輸出,很容易看到,但沒有任何特別的強調。
Form 視圖:表單視圖用于顯示來自單個記錄的數據。它們的根元素是< form >。它們由常規HTML和附加的結構和語義組件組成。
結構構件):結構組件提供了結構或“可視化”特性,幾乎不需要邏輯。它們被用作表單視圖中的元素或元素集。
notebook:定義一個選項卡節。每個選項卡都是通過頁面子元素定義的。頁面可以有以下屬性:1:string(必需)標簽的標題2:accesskey 一個HTML accesskey3:attrs 基于記錄值的標準動態屬性group:用于定義表單中的列布局。1: newline只在組元素中有用,提前結束當前行并立即切換到新行(無需預先填充任何剩余列)2: separator 小的水平間距,一個字符串屬性表現為一個章節標題3: sheet 是否可以作為一個直接的子窗體,以形成一個更窄和響應性更好的窗體布局4:header 與工作表相結合,在工作表本身之上提供一個全寬位置,通常用于顯示工作流按鈕和狀態小部件
語義成分) 語義組件與Odoo系統結合并允許交互。可用的語義組件有
button:調用進入Odoo系統,類似于列表視圖按鈕。此外,還可以指定以下屬性:
1:special 對于在對話框中打開的表單視圖:保存以保存記錄并關閉對話框,取消以關閉對話框而不保存。
2: confirm 在執行按鈕的Odoo調用之前顯示(并讓用戶接受)的確認消息(也適用于看板視圖)。field:呈現(并可能允許編輯)當前記錄的單個字段。多次使用表單視圖中的字段是受支持的,并且字段可以接收“不可見”和“只讀”修飾符的不同值。但是,當多個字段具有不同的修飾符“required”值時,不保證該行為。字段節點的可能屬性為
1: name (mandatory) 要呈現的字段的名稱
2: widget 字段有一個基于其類型的默認呈現(例如Char, Many2one)。小部件屬性允許使用不同的呈現方法和上下文。
3: options JSON對象,指定字段小部件(包括默認小部件)的配置選項
4: class HTML類要設置在生成的元素上,常用字段類有:oe_inline oe_left, oe_right oe_read_only, oe_edit_only oe_avatar
....
結構):
< form> < header> < field name = " state" widget = " statusbar" /> </ header> < sheet> < div class = " oe_button_box" > < BUTTONS/> </ div> < group> < group> < field name = " fname" /> </ group> </ group> < notebook> < page string = " Page1" > < group> < CONTENT/> </ group> </ page> < page string = " Page2" > < group> < CONTENT/> </ group> </ page> </ notebook> </ sheet>
</ form>
Gantt 視圖 甘特視圖適當地顯示甘特圖(用于調度)。 gantt視圖的根元素是,它沒有子元素,但可以接受以下屬性:
date_start (required)
date_stop (required)
color
decoration-{$name}
default_group_by
consolidation
consolidation_max
consolidation_exclude
create, edit, plan
offset
progress
string
precision
total_row
collapse_first_level
display_unavailability
default_scale
scales
templates
form_view_id
thumbnails
< ganttdate_start = " date_start" date_stop = " date_stop" thumbnails = " {' user_id' : ' image_128' }" > </ gantt>
Graph 視圖: 圖表視圖 圖形視圖用于可視化多個記錄或記錄組上的聚合。它的根元素是 < graph > ,它可以接受以下屬性:
type:柱狀圖(默認)、餅狀圖和線狀圖之一,是要使用的圖形類型
stacked:只用于條形圖。如果存在并設置為True,則堆疊組內的條
name (required):
title (optional):顯示在圖形頂部的字符串
type:row (default)/col/measure
interval:在date和datetime字段中,按指定的間隔(日,周,月,季度或年)分組,而不是按特定的datetime(固定的第二分辨率)或日期(固定的日分辨率)分組
Kanban :看板視圖 看板視圖是一種看板可視化:它將記錄顯示為“卡片”,介于列表視圖和不可編輯表單視圖之間。記錄可以分組成列,以用于工作流可視化或操作(例如,任務或工作進度管理),或未分組(僅用于可視化記錄) 板視圖的根元素是< kanban >,它可以使用以下屬性:
default_group_by
default_order
class
examples
group_create
group_delete
archivable
quick_create
quick_create_view
records_draggable
field:name (required)
progressbar:聲明一個progressbar元素放在看板列的頂部:field (required) /colors (required)/ sum_field (optional)
templates
widget
record
context
user_context
read_only_mode
selection_mode
List 視圖 列表視圖的根元素是< tree>。列表視圖的根可以有以下屬性:
editable:默認情況下,選擇列表視圖的行將打開相應的表單視圖。可編輯屬性使列表視圖本身就地可編輯。
有效值分別為top和bottom,這使得新記錄分別出現在列表的頂部或底部。
內聯表單視圖的體系結構是從列表視圖派生出來的。表單視圖的字段和按鈕上有效的大多數屬性因此被列表視圖接受,盡管如果列表視圖不可編輯,它們可能沒有任何意義
multi_edit:可編輯或不可編輯列表可以通過定義multi_edit=1來激活多版本特性
default_order:重寫視圖的順序,替換模型的order (_order模型屬性)。該值是一個以逗號分隔的字段列表,以desc作為后綴,以便按相反順序排序:
< tree default_order = " sequence,name desc" >
decoration-{$name}:允許基于相應記錄的屬性更改行文本的樣式。
create, edit, delete, duplicate, import, export_xlsx:
limit:頁面的默認大小。它必須是一個正整數
groups_limit:當列表視圖被分組時,頁面的默認組數。它必須是位置整數
expand:當列表視圖分組時,如果設置為true(默認值:false),則自動打開第一級組。
button:在列表單元格中顯示一個按鈕:icon/string/type/。。。。
field:
groupby:
< groupby name = " partner_id" > < field name = " name" /> <button type="edit" name"edit" string="Edit/>
< button type = " object" name = " my_method" string = " Button1" attrs = " {' invisible' : [(' name' , ' =' , ' Georges' )]}" />
</ groupby>
control:
Map視圖 這個視圖能夠在地圖上顯示記錄以及它們之間的路線。記錄由引腳表示。它還允許在一個綁定到記錄大頭針的彈出窗口中可視化來自模型的字段。 視圖的根元素是< map>可以有多個屬性
res_partner/ default_order/ routing /name /string
例如:
< map res_partner = " partner_id" default_order = " date_begin" routing = " true" > < marker-popup> < field name = " name" string = " Task: " /> </ marker-popup>
</ map>
Pivot 透視圖 透視視圖用于將聚合可視化為透視表。它的根元素是,它可以接受以下屬性
disable_linking/display_quantity/default_order
< pivot default_order = " foo asc" > < field name = " foo" type = " measure" />
</ pivot>
pivot視圖中唯一允許的元素是字段,它可以具有以下屬性:
name (required):
string:
type:row (default)/col/measure/interval
invisible:
例如,時間表軸心視圖可以定義為:
< pivot string = " Timesheet" > < field name = " employee_id" type = " row" /> < field name = " date" interval = " month" type = " col" /> < field name = " unit_amount" type = " measure" widget = " float_time" />
</ pivot>
QWeb QWeb視圖是一個視圖arch中的標準QWeb模板。它們沒有特定的根元素。因為QWeb視圖沒有一個特定的根元素,它們的類型必須顯式指定(不能從arch字段的根元素推斷)。
QWeb views 有兩個用例: *1.它們可以用作前端模板,在這種情況下,模板應該用作快捷方式。 2.它們可以被用作實際的qweb視圖(在操作中打開),在這種情況下,它們應該被定義為帶有顯式類型(不能推斷)和模型的常規視圖。 對基本的qweb-as-template的qweb-as-view增加的主要內容是:
qweb-as-view有一個特殊的情況下,元素的CSS類o_qweb_cp_buttons:它的內容應該是按鈕,并將被提取和移動到控制面板的按鈕區域,本身將被刪除,這是一個解決方案,控制面板視圖還不存在 qweb-as-view呈現為標準的qweb呈現上下文添加了幾個項:
model:qweb視圖綁定到的模型
domain:由搜索視圖提供的域
context:由搜索視圖提供的上下文
records:model.search(域)的延遲代理,如果您只想迭代記錄而不執行更復雜的操作(如分組),可以使用它。
3.qweb-as-view還提供了額外的渲染鉤子:
_qweb_prepare_context(view_id,域)準備特定于qweb-as-view的呈現上下文
qweb_render_view(view_id, domain)是客戶端調用的方法,它將調用上下文準備方法,并最終調用env['ir.qweb'].render()
Search 視圖 搜索視圖與以前的視圖類型有所不同,因為它們不顯示內容:盡管它們適用于一個特定的模型,但它們被用來過濾其他視圖的內容(通常是聚合的視圖,如列表或圖)。除了用例的不同之外,它們的定義方式是相同的。 搜索視圖的根元素是。它沒有屬性。 搜索視圖可能的子元素有:
field:屬性有:name /string/operator/filter_domain/context/groups/widgetdomain
filter:屬性有 string (required)/ domain (optional)/ date (optional)/default_period (optional)/context /name /help /groups
< filter name = " filter_create_date" date = " create_date" string = " Creation Date" />
< filter name = " filter_create_date" date = " create_date" string = " Creation Date" default_period = " this_week" />
<filter name="groupby_category" string="Category" context = {'group_by': 'category_id'}/>
separator:
group:
searchpanel:
搜索默認值配置:搜索字段和過濾器可以使用search_default_name鍵通過操作的上下文配置。對于字段,值應該是要在字段中設置的值,對于過濾器,它是一個布爾值或數字。例如,假設foo是一個字段,bar是一個動作上下文的過濾器
{'search_default_foo': 'acro','search_default_bar': 1
}
將自動啟用欄過濾器和搜索foo字段的acro。 一個數值(在1到99之間)可以用來描述默認組的順序。例如,如果foo和bar指向兩個組
{'search_default_foo': 2,'search_default_bar': 1
}
總結
以上是生活随笔 為你收集整理的odoo13学习 odoo的视图 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。