視圖?

視圖定義了記錄如何顯示給最終用戶。它們是用XML指定的,這意味著它們可以獨立于它們所代表的模型進行編輯。它們是靈活的,并允許對它們控制的屏幕進行高度自定義。存在各種類型的視圖。每個視圖代表一種可視化模式: 表單 、 列表 、 看板 等。

通用結構?

通常,基本視圖共享下面定義的通用結構。占位符用大寫字母表示。

<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>

字段?

View對象公開了許多字段。除非另有說明,否則它們都是可選的。

  • name (必填): Char

    只有在某種列表中查找視圖時,作為視圖的助記符/描述才有用。

  • model : Char

    視圖所鏈接的模型(如適用)。

  • priority : Integer

    當通過 (model, type) 請求視圖時,將返回與模型和類型匹配的優先級最低的視圖(即默認視圖)。

    它還定義了在 視圖繼承 過程中應用視圖的順序。

  • groups_id Many2many -> odoo.addons.base.models.res_users.Groups

    允許使用/訪問當前視圖的組。

    如果視圖擴展了現有視圖,則只有當用戶具有訪問所提供的“groups_id”權限時,擴展才會應用于給定用戶。

  • arch : Text

    視圖布局的描述。

屬性?

不同的視圖類型具有各種屬性,允許對通用行為進行自定義。這里將解釋一些主要屬性。它們并不對所有視圖類型都產生影響。

注解

當前上下文和用戶訪問權限也可能影響視圖的能力。

  • create

    禁用/啟用視圖上的記錄創建。

  • edit ( form & list & gantt )

    在視圖上禁用/啟用記錄編輯。

  • delete ( formlist )

    通過 操作 下拉菜單禁用/啟用視圖上的記錄刪除。

  • duplicate ( form )

    通過 操作 下拉菜單在視圖上禁用/啟用記錄復制。

  • decoration-{$name} ( listgantt )

    根據相應記錄的屬性,定義類似于行文本的記錄的條件顯示。

    值是Python表達式。對于每個記錄,表達式將使用記錄的屬性作為上下文值進行評估,如果為 true ,則將應用相應的樣式到行中。以下是上下文中可用的其他值:

    • uid : 當前用戶的ID,

    • today : 當前本地日期,格式為 YYYY-MM-DD 的字符串。

    • now : 與 today 相同,但加上了當前時間。該值格式為 YYYY-MM-DD hh:mm:ss 。

    <tree decoration-info="state == 'draft'"
        decoration-danger="state == 'help_needed'"
        decoration-bf="state='busy'">
        <!-- TREE_VIEW_CONTENT -->
    </tree>
    

    警告

    兩種視圖類型支持的值不同。甘特圖視圖僅支持 success 、 info 、 warning 、 dangersecondary 顯示。列表視圖支持 bf 、 it 、 success 、 info 、 warning 、 danger 、 mutedprimary 顯示。

  • sample ( kanban 、 list 、 gantt 、 graph 、 pivot 、 cohortdashboard )

    如果當前模型沒有找到記錄,則使用一組示例記錄填充視圖。默認情況下,此屬性為false。

    這些虛假記錄將具有某些字段名稱/模型的啟發式。例如,模型’res.users’上的字段’display_name’將填充示例人名,而’email’字段將采用’firstname.lastname@sample.demo’的形式。

    用戶將無法與這些數據進行交互,并且它們將在執行操作(創建記錄、添加列等)后立即被丟棄。

  • banner_route 是一個要獲取并添加到視圖中的路由地址。

    如果設置了此屬性,則會獲取 controller route url 并在視圖上方顯示??刂破鞯?json 響應應包含一個 “html” 鍵。

    如果 HTML 包含樣式表 <link> 標簽,它將被移除并添加到 <head> 中。

    要與后端交互,您可以使用<a type=”action”>標簽。請查看AbstractController的_onActionClicked方法的文檔( addons/web/static/src/js/views/abstract_controller.js )以獲取更多詳細信息。

    只有繼承了AbstractView和AbstractController的視圖才能使用這個屬性,例如: 表單 、 看板 、 列表 ,…

    例子:

    <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> """
            }
    

繼承?

繼承字段?

以下兩個 View 字段用于指定繼承的視圖。

  • inherit_id : 類別為 Many2one

    當前視圖的父視圖,默認未設置。使用 ref 屬性指定父視圖:

    <field name="inherit_id" ref="library.view_book_form"/>
    
  • mode Selection : 擴展 / 主要

    繼承模式,默認情況下為“擴展”(如果設置了“inherit_id”),否則為“主要”(primary)。

    在使用 inherit_id 時,需要覆蓋 mode 的一個例子是委托繼承。在這種情況下,您的派生模型將與其父模型分開,與之匹配的視圖將不會與另一個匹配。假設您從與父模型關聯的視圖繼承,并希望自定義派生視圖以顯示來自派生模型的數據。派生視圖的 mode 需要設置為 primary ,因為它是該派生模型的基礎(也可能是唯一)視圖。否則,將不會應用 視圖匹配 規則。

視圖匹配?

  • 如果通過 (model, type) 請求視圖,則匹配具有正確模型和類型、 mode=primary 且優先級最低的視圖。

  • 當通過 id 請求視圖時,如果其模式不是 primary ,則會匹配其具有 primary 模式的 最近 父級。

視圖分辨率?

解析為請求/匹配的“主”視圖生成最終的“arch”:

  1. 如果視圖有父級,則先完全解析父級,然后應用當前視圖的繼承規范

  2. 如果視圖沒有父級,則其“arch”將按原樣使用

  3. 查找當前視圖的子視圖,使用 extension 模式,并深度優先應用它們的繼承規范(先應用子視圖,然后是它的子視圖,最后是它的兄弟視圖)

應用子視圖的結果產生最終的 arch

繼承規范?

繼承規范由元素定位器組成,用于匹配父視圖中繼承的元素,以及將用于修改繼承元素的子元素。

有三種元素定位器可用于匹配目標元素:

  • 一個帶有 expr 屬性的 xpath 元素。 expr 是一個XPath_表達式1,應用于當前的 arch ,它找到的第一個節點是匹配項。

  • 具有“name”屬性的“field”元素將與第一個具有相同“name”的“field”匹配。匹配過程中忽略所有其他屬性。

  • 任何其他元素:匹配具有相同名稱和相同屬性(忽略 positionversion 屬性)的第一個元素

<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>

Inheritance規范可以有一個可選的 position 屬性,指定匹配節點應如何更改:

inside (默認)

繼承規范的內容將附加到匹配的節點上

replace

繼承規范的內容將替換匹配的節點。規范內容中僅包含 $0 的文本節點將被匹配節點的完整副本替換,從而有效地包裝匹配節點。

after

匹配節點后,繼承規范的內容將添加到匹配節點的父級節點之后

before

繼承規范的內容將被添加到匹配節點的父節點中,在匹配節點之前

attributes

繼承規范的內容應該是帶有 name 屬性和可選正文的 attribute 元素:

  • 如果 attribute 元素有內容,則在匹配的節點上創建一個新的屬性,其名稱為 name ,值為 attribute 元素的文本

  • 如果 attribute 元素沒有內容,則從匹配的節點中刪除其名稱后命名的屬性。如果不存在這樣的屬性,則會引發錯誤。

  • 如果 attribute 元素具有 add 屬性、 remove 屬性或兩者都有,則匹配節點的名為 name 的屬性的值將被重新計算,以包括 add 的值(由 separator 分隔)并刪除 remove 的值(由 separator 分隔)。如果未提供 separator ,則使用 , 。

<field name="sale_information" position="attributes">
  <attribute name="invisible">0</attribute>
  <attribute name="attrs">
    {'invisible': [('sale_ok', '=', False)], 'readonly': [('editable', '=', False)]}
  </attribute>
  <attribute name="class" add="mt-1 mb-1" remove="mt-2 mb-2" separator=" "/>
</field>
move

可以作為繼承規范的直接子節點,使用 inside 、 replace 、 afterbeforeposition 屬性來移動節點。

<xpath expr="//@target" position="after">
    <xpath expr="//@node" position="move"/>
</xpath>

<field name="target_field" position="after">
    <field name="my_field" position="move"/>
</field>

視圖的規格按順序應用。

1

在 QWeb 視圖中添加了一個擴展函數,用于更簡單的匹配: hasclass(*classes) 匹配上下文節點是否具有所有指定的類

通用模型?

屬性?

Model._date_name = 'date'?

用于默認日歷視圖的字段

方法?

Model.get_views(views, options=None)[源代碼]?

返回給定視圖的字段視圖,以及當前模型的字段,以及可選地為給定操作返回其過濾器。

參數
  • views – 視圖列表 [視圖ID,視圖類型]

  • options (dict) – 一個可選的布爾標志字典,設置為啟用: toolbar 包括加載 fields_views 時的上下文操作 load_filters 返回模型的過濾器 action_id 獲取過濾器的操作ID,否則加載全局過濾器或模型

返回

包含 fields_views、fields 和可選 filters 的字典

Model.get_view([view_id | view_type='form'])[源代碼]?

獲取請求視圖的詳細組成,例如模型、視圖架構

參數
  • view_id (int) – 視圖的ID或無

  • view_type (str) – 如果視圖ID為None,則返回的視圖類型(’form’,’tree’,…)

  • options (dict) – 布爾選項以返回其他功能:- bool mobile:如果Web客戶端當前使用響應式移動視圖(以使用看板視圖而不是列表視圖用于x2many字段),則為true

返回

請求的視圖組成(包括繼承的視圖和擴展)

返回類型

dict

引發
  • AttributeError

    • 如果繼承的視圖除了 ‘before’、’after’、’inside’、’replace’ 之外還有未知的位置,則無法處理。

    • 如果在父視圖中發現除’position’之外的標簽

  • Invalid ArchitectureError – 如果在結構中定義了除表單、樹形、日歷、搜索等視圖類型之外的視圖類型

視圖類型?

活動?

活動視圖用于顯示與記錄相關聯的活動。數據以圖表形式顯示,記錄形成行,活動類型形成列。每行的第一個單元格顯示一個(可定制的,參見“模板”,與 看板 類似)卡片,代表相應的記錄。單擊其他單元格時,將顯示該記錄的所有相同類型的活動的詳細描述。

警告

只有在安裝了“郵件”模塊并且繼承了“mail.activity.mixin”模型的情況下,才能使用活動視圖。

活動視圖的根元素是 <activity> ,它接受以下屬性:

string (必填)

一個描述視圖的標題

視圖元素的可能子元素有:

field

聲明在活動 邏輯 中使用的字段。如果該字段僅在活動視圖中顯示,則無需預先聲明。

可能的屬性有:

name (必填)

要獲取的字段的名稱

templates

定義了 QWeb模板 模板。為了清晰,卡片定義可以分成多個模板,但是活動視圖 必須 定義至少一個根模板 activity-box ,該模板將為每個記錄渲染一次。

活動視圖主要使用標準的 javascript qweb ,并提供以下上下文變量(更多細節請參見 看板 ):

widget

當前 :js ActivityRecord ,可以用于獲取一些元信息。這些方法也可以直接在模板上下文中使用,無需通過 widget 訪問。

record

一個對象,其所有請求的字段都作為其屬性。每個字段都有兩個屬性 valueraw_value

日歷?

日歷視圖將記錄顯示為每日、每周、每月或每年的事件。

注解

默認情況下,日歷視圖將以當前日期(今天)為中心。您可以將特定的初始日期傳遞給操作的上下文,以便將日歷的初始焦點設置在該日期周圍的期間(請參見 mode )。使用的上下文鍵是 initial_date 。

它們的根元素是 <calendar> 。日歷視圖上可用的屬性有:

date_start (必填)

記錄中保存事件開始日期的字段名稱

date_stop

如果提供了 date_stop ,則記錄的字段名稱將包含事件的結束日期,記錄將可以通過拖放直接在日歷中移動

date_delay

date_stop 相對應,提供事件的持續時間而不是結束日期(單位:天)

color

用于 顏色分段 的記錄字段名稱。在日歷中,同一顏色段中的記錄被分配相同的高亮顏色,顏色是半隨機分配的。在側邊欄中顯示可見記錄的display_name/avatar

form_view_id

在用戶創建或編輯事件時打開的視圖。請注意,如果未設置此屬性,則日歷視圖將回退到當前操作中表單視圖的ID(如果有)。

event_open_popup

如果選項 ‘event_open_popup’ 設置為 true,則日歷視圖將在 FormViewDialog 中打開事件(或記錄)。否則,它將在新的表單視圖中打開事件(使用 do_action)。

quick_add

啟用點擊快速創建事件:僅要求用戶輸入“名稱”(可以通過“rec_name”控制保存該值的字段),并嘗試僅使用該名稱和點擊的事件時間創建新事件。如果快速創建失敗,則回退到完整的表單對話框。

create_name_field

記錄的字段名稱,保存記錄的文本表示形式,用于通過“快速創建”機制創建記錄時使用

all_day

記錄中一個布爾字段的名稱,指示相應的事件是否被標記為全天事件(持續時間無關緊要)

mode

加載日歷時的默認顯示模式??赡艿膶傩灾禐椋?day 、 week 、 month 、 year 。

scales

提供的比例尺的逗號分隔列表。默認情況下,所有比例尺都可用。有關可能的比例尺值,請參見模式。

create , delete

允許通過將相應屬性設置為“false”來禁用視圖中的相應操作

<field>

聲明要聚合或在看板邏輯中使用的字段。如果該字段僅在日歷卡片中顯示,則忽略。

字段可以有額外的屬性:

invisible

在卡片中隱藏該值,請使用“True”

頭像字段

僅適用于x2many字段,在卡片中顯示頭像而不是顯示名稱

write_modelwrite_fieldfilter_field

您可以添加篩選器并將結果保存在定義的模型中,篩選器將添加在側邊欄中。 filter_field 是可選的,允許您指定將保存篩選器狀態的字段。

filterscolor

使用”True”將此字段添加到側邊欄的篩選器中。您可以指定一個 color 字段用于給復選框上色。

同期?

Enterprise feature

群體視圖用于顯示和理解一些數據隨時間變化的方式。例如,假設對于某個企業,客戶可以訂閱某些服務。然后,群體視圖可以顯示每個月的訂閱總數,并研究客戶離開服務的速率(流失率)。單擊單元格時,群體視圖將重定向您到一個新的操作,您將只看到單元格時間間隔內包含的記錄;此操作包含列表視圖和表單視圖。

注解

默認情況下,同操作定義的列表視圖和表單視圖將用于群體視圖。您可以將列表視圖和表單視圖傳遞給操作的上下文,以設置/覆蓋將使用的視圖(使用的上下文鍵為 form_view_idlist_view_id

例如,這里是一個非常簡單的同期視圖:

<cohort string="Subscription" date_start="date_start" date_stop="date" interval="month"/>

Cohort視圖的根元素是<cohort>,它接受以下屬性:

string (必填)

一個描述視圖的標題

date_start (必填)

一個有效的日期或日期時間字段。該字段被視圖理解為記錄的開始日期。

date_stop (必填)

一個有效的日期或日期時間字段。該字段被視圖理解為記錄的結束日期。這是確定流失的字段。

mode (可選)

一個描述模式的字符串。它應該是’churn’或’retention’(默認)。Churn模式將從0%開始隨著時間的推移而累積,而retention模式將從100%開始隨著時間的推移而減少。

timeline (可選)

一個描述時間軸的字符串。它應該是’backward’或’forward’(默認)。前向時間軸將顯示從date_start到date_stop的數據,而后向時間軸將顯示從date_stop到date_start的數據(當date_start在未來/大于date_stop時)。

interval (可選)

描述時間間隔的字符串。它應該是 ‘day’,’week’,’month’(默認)或 ‘year’。

measure (可選)

可聚合的字段。該字段將用于計算每個單元格的值。如果未設置,則隊列視圖將計算出現次數。

<field> (可選)

允許指定特定字段以便從可用的度量中進行管理,其主要用途是隱藏可選度量中的字段:

name (必填)

在視圖中使用的字段名稱。

string (可選)

將在隊列視圖中顯示該字段的名稱,覆蓋字段的默認 Python 字符串屬性。

invisible (可選)

如果為真,則該字段既不會出現在活動度量中,也不會出現在可選擇的度量中(對于不適合聚合的字段非常有用,例如不同單位的字段,例如 € 和 $)。

儀表板?

Enterprise feature

與透視圖和圖表視圖一樣,儀表板視圖用于顯示聚合數據。但是,儀表板可以嵌入子視圖,這使得在給定數據集上具有更完整和有趣的外觀成為可能。

儀表板視圖可以顯示子視圖、某些字段的聚合(在一個域上),甚至可以顯示 公式 (涉及一個或多個聚合的表達式)。例如,這是一個非常簡單的儀表板:

<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

聲明一個子視圖。

可接受的屬性有:

type (必填)

子視圖的類型。例如, 圖表透視表 。

ref (可選)

視圖的 XML ID。如果未提供,則將使用模型的默認視圖。

name (可選)

一個字符串,用于標識此元素。它主要用于作為xpath的目標。

group

定義了一個列布局。這實際上與表單視圖中的組元素非常相似。

可接受的屬性有:

string (可選)

一個描述,將顯示為組標題。

colspan (可選)

此組標簽中的子列數。默認為6。

col (可選)

該組標簽跨越的列數(僅在另一個組內有意義)。默認為6列。

aggregate

聲明一個聚合。這是當前域中給定字段的聚合值。

請注意,聚合應該在組標簽內使用(否則樣式將無法正確應用)。

可接受的屬性有:

field (必填)

用于計算聚合的字段名稱??赡艿淖侄晤愋陀校?/p>

  • integer (默認分組運算符為求和)

  • float (默認分組操作符為求和)

  • many2one (默認分組操作符為計數去重)

name (必填)

用于標識此聚合的字符串(對于公式很有用)

string (可選)

一個簡短的描述,將顯示在值的上方。如果未提供,則會回退到字段字符串。

domain (可選)

我們想要聚合的記錄集合上的附加限制。此域將與當前域結合。

domain_label (可選)

當用戶點擊帶有域的聚合時,它將作為一個facet添加到搜索視圖中??梢允褂么藢傩宰远x顯示此facet的字符串。

group_operator (可選)

一個有效的 PostgreSQL 聚合函數標識符,用于聚合值(請參閱 https://www.postgresql.org/docs/12/static/functions-aggregate.html)。如果未提供,則默認使用字段定義中的 group_operator。請注意,如果 group_operator 的值為 “”,則不會對字段值進行聚合。

注解

在這里也可以使用odoo中定義的特殊聚合函數 count_distinct

<aggregate name="price_total_max" field="price_total" group_operator="max"/>
col (可選)

該標簽跨越的列數(僅在組內有意義)。默認為1。

widget (可選)

一個用于格式化值的小部件(類似于字段的小部件屬性)。例如,貨幣。

help (可選)

在工具提示中顯示的幫助信息(相當于Python字段的幫助)

measure (可選)

此屬性是描述在單擊聚合時在圖形和透視視圖中使用的度量的字段名稱。特殊值__count__可用于使用計數度量。

<aggregate name="total_ojects" string="Total Objects" field="id" group_operator="count" measure="__count__"/>
clickable (可選)

一個布爾值,指示此聚合是否可點擊(默認為 true)。點擊可點擊的聚合將更改子視圖使用的度量,并將域屬性的值(如果有)添加到搜索視圖中。

value_label (可選)

一個放置在聚合值右側的字符串。例如,它可以用于指示聚合值的計量單位。

formula

聲明一個派生值。公式是從聚合計算出的值。

請注意,與聚合函數一樣,公式應該在組標簽內使用(否則樣式將無法正確應用)。

可接受的屬性有:

value (必填)

一個字符串表達式,將使用內置的Python評估器(在Web客戶端中)進行評估。每個聚合都可以在上下文中使用,即在“record”變量中。例如, record.price_total / record.order_id 。

name (可選)

用于標識此公式的字符串

string (可選)

在公式上方顯示的簡短描述。

col (可選)

該標簽跨越的列數(僅在組內有意義)。默認為1。

widget (可選)

格式化值的小部件(例如字段的小部件屬性)。例如,貨幣。默認情況下,它是“float”。

help (可選)

在工具提示中顯示的幫助信息(相當于Python字段的幫助)

value_label (可選)

公式值右側的字符串。例如,指示公式值的計量單位可能很有用。

widget

聲明一個專用的小部件來顯示信息。這是一種類似于表單視圖中小部件的機制。

可接受的屬性有:

name (必填)

用于標識應該實例化哪個小部件的字符串。視圖將查找 widget_registry 來獲取正確的類。

col (可選)

該標簽跨越的列數(僅在組內有意義)。默認為1。

表單?

表單視圖用于顯示單個記錄的數據。它們的根元素是 <form> 。它們由常規的 HTML 組成,具有額外的結構和語義組件。

結構組件?

結構組件提供結構或“視覺”特征,具有較少的邏輯。它們用作表單視圖中的元素或元素集。

notebook

定義一個選項卡部分。每個選項卡通過“page”子元素定義。頁面可以具有以下屬性:

string (必填)

選項卡的標題

accesskey

一個HTML訪問鍵

attrs

基于記錄值的標準動態屬性

注解

請注意, notebook 不應放置在 group

group

用于在表單中定義列布局。默認情況下,組定義2列,大多數組的直接子元素占用1列。組的 field 直接子元素默認顯示標簽,標簽和字段本身各自具有1個colspan。

group 中的列數可以使用 col 屬性進行自定義,元素占用的列數可以使用 colspan 進行自定義。

子元素水平排列(嘗試填充下一列,然后再換行)。

組可以有一個“字符串”屬性,它會顯示為該組的標題

newline

僅在“group”元素內有用,可以提前結束當前行并立即切換到新行(不填充任何剩余列)

separator

小的水平間距,帶有 string 屬性的行為類似于一個標題

sheet

可以作為 form 的直接子元素使用,用于更窄和更具響應性的表單布局

header

結合 sheet ,提供了一個全寬度的位置,位于表格本身上方,通常用于顯示工作流按鈕和狀態小部件

語義組件?

語義組件與Odoo系統相連,并允許與之交互??捎玫恼Z義組件包括:

button

調用Odoo系統,類似于 列表視圖按鈕 。此外,還可以指定以下屬性:

special

對于在對話框中打開的表單視圖: 保存 `` 保存記錄并關閉對話框, ``取消 關閉對話框而不保存。

confirm

在執行按鈕的Odoo調用之前,要顯示的確認消息(并由用戶接受)(在看板視圖中也適用)。

field

渲染(并允許編輯)當前記錄的單個字段。在表單視圖中多次使用字段是支持的,并且字段可以接收不同的修飾符’invisible’和’readonly’的值。但是,當存在多個字段具有不同的修飾符’required’的值時,行為不能保證。字段節點的可能屬性包括:

name (必填)

要呈現的字段的名稱

id

節點 ID。當視圖中存在多個相同字段的情況時有用(參見下面的 標簽 組件)。默認為字段名稱。

widget

字段根據其類型(例如 Char 、 Many2one )具有默認渲染。 widget 屬性允許使用不同的渲染方法和上下文。

options

JSON 對象,指定字段小部件的配置選項(包括默認小部件)

class

在生成的元素上設置的HTML類,常見的字段類包括:

oe_inline

防止字段后的通常換行,并限制它們的跨度。

oe_left , oe_right

將字段浮動到相應的方向

oe_read_only , oe_edit_only

僅在相應的表單模式下顯示該字段

oe_avatar

對于圖像字段,將圖像顯示為“頭像”(正方形,最大尺寸為90x90,帶有一些圖像裝飾)

groups

僅為特定用戶顯示該字段

on_change

當編輯該字段的值時調用指定的方法,可以生成更新其他字段或向用戶顯示警告

8.0 版后已移除: 在模型上使用 odoo.api.onchange()

attrs

基于記錄值的動態元參數

domain

僅適用于關系字段,在選擇現有記錄時應用的過濾器

context

僅適用于關系字段,獲取可能值時要傳遞的上下文

readonly

在只讀和編輯模式下顯示字段,但永遠不要使其可編輯

required

如果字段沒有值,則生成錯誤并阻止保存記錄

nolabel

不自動顯示字段標簽,僅在字段是“group”元素的直接子級時才有意義

placeholder

空白 字段中顯示的幫助信息??梢蕴鎿Q復雜表單中的字段標簽。 不應該 是數據示例,因為用戶可能會將占位文本與填充字段混淆。

mode

對于 One2many ,用于顯示字段關聯記錄的顯示模式(視圖類型)??蛇x值為 tree 、 form 、 kanbangraph 。默認值為 tree (列表顯示)。

help

當用戶懸停在字段或其標簽上時顯示的工具提示

filename

對于二進制字段,提供文件名的相關字段的名稱

password

表示一個 Char 字段存儲的是密碼,其數據不應該被顯示

kanban_view_ref

在移動環境中從m2o/m2m中選擇記錄時打開特定看板視圖

label

field 組件不直接放置在 group 中,或者其 nolabel 屬性被設置時,該字段的標簽不會自動顯示在其值旁邊。 label 組件是手動顯示字段標簽的替代方法??赡艿膶傩园ǎ?/p>

for (必填)

與標簽相關聯的字段的引用??梢允亲侄蔚拿Q或其ID(設置在 field 上的 id 屬性)。當視圖中有多個相同字段的出現,并且有多個與這些 field 節點關聯的 label 組件時,這些標簽必須具有唯一的 for 屬性(在這種情況下引用相應 field 節點的 id 屬性)。

string

要顯示的標簽。默認情況下顯示字段的標簽(來自模型中的字段定義)。

class

field 組件相同。

attrs

field 組件相同。

通用結構?

<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>

甘特圖?

Enterprise feature

甘特圖視圖適當地顯示甘特圖(用于調度)。

gantt視圖的根元素是 <gantt/> ,它沒有子元素,但可以使用以下屬性:

date_start (必填)

每條記錄提供事件開始日期時間的字段名稱。

date_stop (必填)

為每個記錄提供事件結束時間的字段名稱。

dependency_field

提供兩個記錄之間依賴關系的 many2many 字段的名稱。如果B依賴于A,則 dependency_field 是允許從B獲取A的字段。這個字段和 dependency_inverted_field 字段都用于繪制依賴箭頭,以便調整它們的時間表。

dependency_inverted_field (如果提供了 dependency_field 則必填)

提供反向依賴關系的 many2many 字段的名稱,比 dependency_field 更具有依賴性。如果B依賴于A,則 dependency_inverted_field 是允許從A獲取B的字段。

color

用于根據其值著色藥丸的字段名稱

decoration-{$name}

允許根據相應記錄的屬性更改行文本的樣式。

值是Python表達式。對于每個記錄,表達式將使用記錄的屬性作為上下文值進行評估,如果為 true ,則將應用相應的樣式到行中。以下是上下文中可用的其他值:

  • uid : 當前用戶的ID,

  • today : 當前本地日期,格式為 YYYY-MM-DD 的字符串。

  • now : 與 today 相同,但加上了當前時間。該值格式為 YYYY-MM-DD hh:mm:ss 。

{$name} 可以是以下 bootstrap 上下文顏色 之一 ( danger , info , secondary , successwarning )。

default_group_by

按字段分組任務的字段名稱

disable_drag_drop

如果設置為 true,則甘特圖視圖將不支持拖放操作

consolidation

在記錄單元格中顯示合并值的字段名稱

consolidation_max

使用“group by”字段作為鍵的字典,其中包含在顯示單元格變為紅色之前可以達到的最大合并值(例如“{“user_id”: 100}”)

consolidation_exclude

描述任務是否需要從合并中排除的字段名稱,如果設置為true,則在合并行中顯示帶條紋的區域

create , cell_create , edit , delete , plan

允許通過將相應屬性設置為“false”(默認值:“true”)來 禁用 視圖中的相應操作。

  • create : 如果啟用,控制面板中將會有一個“添加”按鈕,用于創建記錄。

  • cell_create : 如果啟用并啟用了 create ,則在懸停在時間槽單元格上時將顯示一個” + “按鈕,以在該時間槽上創建新記錄。

  • edit : 如果啟用,打開的記錄將處于編輯模式(因此可編輯)。

  • plan : 如果啟用并且啟用了 edit ,則會在時間段上顯示一個”放大鏡”按鈕,以便將未分配的記錄計劃到該時間段。

Example

當您不想在甘特視圖上創建記錄,并且模型需要開始和結束日期時,應禁用計劃功能,因為永遠找不到記錄。

offset

根據規模,添加到今天以計算默認周期的單位數。例如:在默認規模為周的情況下,偏移量為+1將打開下周的甘特圖視圖,在默認規模為月的情況下,偏移量為-2將打開2個月前的甘特圖視圖。

progress

記錄事件完成百分比的字段名稱,介于0和100之間

string

甘特圖視圖的標題

precision

JSON 對象,指定每個刻度中藥丸的捕捉精度。

day 的可能取值為(默認值: hour ):

  • hour : 記錄時間按整點對齊(例如: 7:12 變成 8:00)

  • hour:half : 記錄時間按半小時取整 (例如: 7:12 變成 7:30)

  • hour:quarter : 記錄時間會被調整到半小時(例如: 7:12 會變成 7:15)

刻度 week 的可能值為(默認值: day:half ):

  • day : 記錄時間戳到整天(例如: 上午7:28變成前一天的晚上11:59:59,晚上10:32變成當天中午12:00)

  • day:half : 記錄時間按半小時取整 (例如: 7:28 AM 變成 12:00 PM)

刻度 month 的可能值為(默認值: day:half ):

  • day : 記錄時間戳到整天(例如: 上午7:28變成前一天的晚上11:59:59,晚上10:32變成當天中午12:00)

  • day:half : 記錄時間按半小時取整 (例如: 7:28 AM 變成 12:00 PM)

年度刻度始終對齊到完整的一天。

精度屬性的示例: {"day": "hour:quarter", "week": "day:half", "month": "day"}

total_row

布爾值,用于控制是否顯示包含記錄總數的行。(默認值: false

collapse_first_level

布爾值,用于控制是否可以折疊每一行,如果按一個字段分組。 (默認值: false ,當按兩個字段分組時開始折疊)

display_unavailability

布爾值,用于將模型的 gantt_unavailability 函數返回的日期標記為在甘特圖視圖中可用。記錄仍然可以在其中安排,但它們的不可用性會在視覺上顯示。(默認值: false )

default_scale

渲染視圖時的默認比例尺??赡艿闹禐椋J值: month ):

  • day

  • week

  • month

  • year

scales

視圖允許的比例尺的逗號分隔列表。默認情況下,允許所有比例尺。有關此列表中可用的比例尺值,請參見“default_scale”。

templates

定義了 QWeb模板 模板 gantt-popover ,用于當用戶在甘特圖視圖中懸停在記錄上時使用。

gantt視圖主要使用標準的 javascript qweb ,并提供以下上下文變量:

widget

當前 :js GanttRow ,可用于獲取一些元信息。 getColor 方法可直接在模板上下文中使用,無需使用 widget ,用于將其轉換為顏色整數。

on_create

如果在單擊視圖上的添加按鈕時指定,將啟動客戶端操作,而不是打開通用對話框。這應該包含操作的xmlid(例如: on_create="%(my_module.my_wizard)d"

form_view_id

在用戶創建或編輯記錄時打開的視圖。請注意,如果未設置此屬性,則甘特圖視圖將回退到當前操作中表單視圖的ID(如果有)。

dynamic_range

如果設置為 true,則甘特圖視圖將從第一條記錄開始,而不是從年/月/日的開始處開始。

pill_label

如果設置為 true,則在將比例尺設置為周或月時,時間將出現在藥丸標簽中。 (例如 7:00 AM - 11:00 AM (4h) - DST Task 1 )。

thumbnails

如果組是關系字段,這將允許在組名旁邊顯示縮略圖。這需要一個Python字典,其鍵是活動模型上字段的名稱。值是相關模型上持有縮略圖的字段的名稱。

例如:任務有一個字段 user_id,它引用了 res.users。res.users 模型有一個字段 image,它保存了頭像,那么:

<gantt
   date_start="date_start"
   date_stop="date_stop"
   thumbnails="{'user_id': 'image_128'}"
 >
 </gantt>

將按用戶ID分組時,顯示用戶頭像在其名稱旁邊。

圖表?

圖表視圖用于可視化一組記錄或記錄組的聚合。其根元素為 <graph> ,可以使用以下屬性:

type (可選)

其中之一為 bar (默認值)、 pieline ,表示要使用的圖表類型

stacked (可選)

僅用于“條形”圖表。將其設置為“0”可防止組內的條形初始堆疊。

disable_linking (可選)

將其設置為 1 以防止將圖表上的點擊重定向到列表視圖

order (可選)

如果設置,x軸值將默認按照給定順序( ascdesc )根據其度量進行排序。僅用于 barpie 圖表。

string (可選)

重定向到列表視圖時在面包屑中顯示的字符串。

圖表視圖中唯一允許的元素是 field ,它可以具有以下屬性:

name (必填)

視圖中要使用的字段名稱。如果用于分組(而不是聚合),請使用此字段。

invisible (可選)

如果為真,則該字段既不會出現在活動度量中,也不會出現在可選擇的度量中。

type (可選)

如果設置為 measure ,則該字段將在組內用作聚合值,而不是分組條件。它僅適用于具有該屬性的最后一個字段,但對于具有字符串屬性的其他字段也很有用(見下文)。

interval (可選)

在日期和日期時間字段上,按指定的間隔( day 、 week 、 month 、 quarteryear )分組,而不是按特定的日期時間(固定秒分辨率)或日期(固定天分辨率)分組。默認為 month 。

string (可選)

僅用于 type="measure" 的字段。在圖表視圖中顯示字段的名稱,覆蓋字段的默認 Python 字符串屬性。

度量值是從模型字段自動生成的;只使用可聚合字段。這些度量值也按字段字符串的字母順序排序。

警告

圖形視圖聚合是在數據庫內容上執行的,非存儲函數字段不能在圖形視圖中使用。

網格?

Enterprise feature

限制?

此視圖正在進行中,可能需要擴展或更改。

  • 僅測試了“date”列字段,“selection”和“many2one”名義上已實現和支持,但未經過測試,“datetime”根本未實現。

  • 列單元格幾乎不可配置且必須為數字

  • 單元格調整默認情況下被禁用,必須配置為啟用

  • 由于 fields_view_get 后處理中存在固定的顯式列表,因此視圖根上不會自動設置 create 、 editdelete ACL元數據。

模式?

網格視圖在此模塊中具有自己的架構和額外的驗證。視圖架構如下:

<grid> (1)

架構根元素

  • 必填的 string 屬性

  • 可選的 create 、 editdelete 屬性

  • 可選的 adjustmentadjust_name 屬性

    adjustment 可以是 objectaction ,用于指示單元格的調整是通過方法調用還是操作執行進行的。 adjust_name 分別提供了方法名稱和操作 ID。

    在這兩種情況下,調整參數都作為 grid_adjust 上下文成員提供,在“object”情況下,參數也作為位置函數參數提供(緊挨著一個空的 ID 列表):

    row_domain

    匹配已調整單元格整行的域

    column_field

    調整單元格的列名稱

    column_value

    已調整單元格的列的值

    cell_field

    已調整單元格的度量字段

    change

    單元格舊值和調整后值之間的差異可能為正或負

  • 可選的 hide_line_totalhide_column_total 屬性

    hide_line_total

    設置為 true 以隱藏總行(默認為 false)

    hide_column_total

    設置為 true 以隱藏總計列(默認為 false)

  • 可選的 barchart_total 屬性

    barchart_total

    設置為 true 以在網格底部顯示基于列總計的條形圖(默認為false)。

  • 可選的 create_inlinedisplay_empty 屬性

    create_inline

    設置為 true 以在網格底部顯示一個額外的行,并帶有一個 添加一行 `` 按鈕(默認為 false)。當此選項設置為 ``true 時,控制面板中的 添加一行 `` 按鈕將被隱藏。當沒有可用數據且未設置 ``display_empty (因此顯示幫助內容時),控制面板中的 添加一行 按鈕將顯示,以便讓用戶創建第一條記錄。

    display_empty

    設置為 true 以在沒有數據時繼續顯示網格(默認為false)。當您希望用戶能夠跟蹤當前時間段(因為日期顯示在列標題中)時,這可能很有用。提醒一下,當沒有數據存在且未設置此屬性時,將顯示幫助內容而不是網格。

<button> (0+)

在視圖標題中顯示的常規Odoo操作按鈕

  • 必填的 string 屬性(按鈕標簽)

  • 必填的 type 屬性,可以是 objectaction

    注解

    不支持工作流按鈕

  • 必填的 name 屬性,可以是要調用的方法的名稱,也可以是要執行的操作的 ID

  • 可選的 context

服務器回調函數提供了在視圖中顯示的所有記錄ID,可以作為傳遞給方法的ID( object 按鈕)或上下文的 active_idsaction 按鈕)

<field type="row"> (1+)

行分組字段,如果有的話,將被搜索視圖的 groupby 過濾器替換。

視圖中“行”字段的順序提供了它們的分組深度:如果第一個字段是“school”,第二個字段是“age”,則記錄將首先按“school”分組,然后在每個學校內按“age”分組。

<field type="col"> (1)

列分組字段。

col字段可以包含0個或多個 <range> 元素,用于指定可自定義的列范圍。 range 元素具有以下強制屬性

name

可以通過 grid_range 上下文值來覆蓋默認范圍(默認情況下為第一個)

string

范圍按鈕的標簽(用戶可見)

span

在視圖中一次顯示的所有列的跨度的符號名稱,可能會觸發分頁。

對于“日期”字段,有效的時間跨度目前為“周”和“月”。

step

前一列和后一列之間的步驟的符號名稱

對于“日期”字段,目前唯一有效的跨度是“天”。

<field type="measure"> (1)

單元格字段,由 read_group 自動累加。

度量字段可以使用“widget”屬性來自定義其顯示方式。

服務器交互?

除了可選按鈕外,網格視圖目前調用兩個方法:

  • read_grid (由模塊提供的所有模型都提供)將幾乎整個網格內容作為字典返回:

    • 行標題是一個帶有以下鍵的字典列表:

      values (必填)

      這將映射到一個字典,每個 row 字段都有一個鍵,其值始終為 [value,label] 形式。

      domain (必填)

      在單元格調整期間需要復制記錄時,此行源記錄的域

    • 列標題是一個至少包含一個鍵的字典列表:

      values (必填)

      查看行標題值

      domain (必填)

      查看列域值

      current (可選)

      布爾值,標記/突出顯示一列

    • 將網格數據作為單元格字典的列表(行的列表)的列表返回,每個單元格字典都具有以下鍵:

      value

      與單元格相關聯的數值

      domain

      匹配單元格記錄的域(應被視為不透明)

      size

      單元格中分組的記錄數

      readonly (可選)

      一個布爾值,指示此特定單元格不應該在客戶端進行編輯

      classes (可選)

      一個字符串列表,包含要添加到單元格容器中(在單元格的 TD 和可編輯元素之間)的類。

      如果此列表與基類(以 o_grid_cell_ 為前綴)之間存在沖突,則忽略此列表中的類。

      請注意,網格數據是 密集的 ,如果查詢數據庫沒有匹配到單元格的組,那么該單元格將生成一個帶有所需鍵的默認值的”空”單元格。

    • prevnext 可以是假值(無分頁)或要合并到視圖自身上下文中的上下文項,以 read_grid 讀取上一頁或下一頁,應假定其為不透明的

  • read_grid_domain(field, range) (由模塊提供的所有模型)返回與網格的當前配置的“跨度”匹配的域。 這也是由 read_grid 在內部完成的,但是獨立調用可能是有用或必要的,例如與單獨的 search_countread_group 一起使用。

  • adjust_grid ,目前還沒有一個通用的實現,其語義可能會隨著時間和使用情況而發生變化

服務器鉤子?

read_grid 調用了一些鉤子,允許在不必覆蓋整個方法的情況下從內部自定義其操作:

_grid_format_cell(group, cell_field)

將 read_group(按組分組)的輸出轉換為上述格式的單元格(作為“網格數據”的一部分)

_grid_make_empty_cell(row_domain, column_domain, view_domain)

生成一個空的單元格版本(如果沒有相應的組)

_grid_column_info(name, range)

基于列類型生成 ColumnMetadata 對象,將值存儲為直接返回的部分(作為 read_grid 的一部分)或用于查詢和重新格式化 read_group 以轉換為 read_grid

grouping

用于列的實際分組字段/查詢

domain

如果列字段進行分頁,則在 read_group 中應用的域,可以是空列表

prevnext

將被發送到 read_grid 的上一頁和下一頁的上下文段。如果為 False ,則禁用該方向的分頁。

values

在“當前頁面”上顯示的列值,每個值都是一個帶有以下鍵的字典:

values

將字段名稱映射到整個列的值的字典,通常只有 name -> 值

domain

匹配此特定列的域

is_current

True 表示當前列應在網格中特別標出, False 表示不需要

format

如何將該列/類型的值從“read_group”格式轉換為“read_grid”格式(與ColumnInfo中的“values”匹配)

訪問控制列表?

  • 如果視圖不可編輯,則單個單元格也不可編輯

  • 如果視圖不可創建,則“添加行”按鈕將不會顯示(當前它會創建一個新的空記錄)

上下文鍵?

grid_range

選擇默認使用哪個范圍,如果視圖有多個范圍

grid_anchor

如果適用,將用作列范圍的默認錨點,而不是 read_grid 定義的默認值。

對于日期字段,計算初始跨度的參考日期。默認日期錨定為“今天”(用戶所在時區)

看板?

看板視圖是一種 看板板 可視化方式:它將記錄顯示為“卡片”,介于 列表視圖 和不可編輯的 表單視圖 之間。記錄可以分組在列中,用于工作流程可視化或操作(例如任務或工作進度管理),或未分組(僅用于記錄可視化)。

注解

看板視圖最多會加載和顯示十列。超過十列的列會被關閉(但用戶仍然可以打開它們)。

看板視圖的根元素是 <kanban> ,它可以使用以下屬性:

default_group_by

如果沒有通過操作或當前搜索指定分組方式,是否應該對看板視圖進行分組。當沒有其他指定分組方式時,應該按字段名稱進行分組。

default_order

如果用戶尚未通過列表視圖對記錄進行排序,則使用的卡片排序順序

class

向看板視圖的根HTML元素添加HTML類

examples

如果設置為 KanbanExamplesRegistry 中的一個鍵,則在分組看板視圖中將提供有關列設置的示例。 `這里 <https://github.com/odoo/odoo/blob/99821fdcf89aa66ac9561a972c6823135ebf65c0/addons/project/static/src/js/project_task_kanban_examples.js#L27>`_是定義這些設置的示例。

group_create

“添加新列”欄是否可見。默認值:true。

group_delete

是否可以通過上下文菜單刪除組。默認值:true。

group_edit

是否可以通過上下文菜單編輯組。默認值:true。

archivable

如果模型定義了一個 active 字段,則該字段所屬的記錄是否可以被歸檔/恢復。默認值:true。

quick_create

是否應該允許在不切換到表單視圖的情況下創建記錄。默認情況下,當看板視圖按many2one、selection、char或boolean字段分組時, quick_create 是啟用的,否則是禁用的。

quick_create_view

form 視圖引用,指定用于快速創建記錄的視圖。

records_draggable

是否允許在看板分組時拖動記錄。默認值:true。

將其設置為 true 以始終啟用它,將其設置為 false 以始終禁用它。

groups_draggable

是否允許在看板分組時重新排序列。默認值:true。

將其設置為 true 以始終啟用它,將其設置為 false 以始終禁用它。

視圖元素的可能子元素有:

field

聲明在看板邏輯中使用的字段。如果該字段僅在看板視圖中顯示,無需預先聲明。

可能的屬性有:

name (必填)

要獲取的字段的名稱

allow_group_range_value (可選)

一個 datedatetime 字段是否允許從分組范圍(由分組的第一個和最后一個日期組成)計算出一個值。當看板視圖按該字段分組時,啟用“快速創建”和“拖放”功能。默認值:false。

progressbar

聲明一個進度條元素,放置在看板列的頂部。

可能的屬性有:

field (必填)

用于在進度條中對列記錄進行分組的字段名稱

colors (必填)

將上述字段值映射為”danger”、”warning”、”success”或”muted”顏色的JSON

sum_field (可選)

將被求和并顯示在進度條旁邊的字段的名稱(如果省略,則顯示記錄的總數)

templates

定義了一個 QWeb模板 模板列表。為了清晰,卡片定義可以分成多個模板,但是看板視圖 必須 定義至少一個根模板 kanban-box ,該模板將為每個記錄渲染一次。

看板視圖主要使用標準的 javascript qweb ,并提供以下上下文變量:

widget

當前 :js KanbanRecord ,可用于獲取一些元信息。這些方法也可以直接在模板上下文中使用,無需通過 widget 訪問。

record

一個對象,其所有請求的字段都作為其屬性。每個字段都有兩個屬性 valueraw_value ,前者根據當前用戶參數進行格式化,后者是從 read() 直接獲取的值(除了日期和日期時間字段,它們是根據用戶的語言環境進行格式化的 <https://github.com/odoo/odoo/blob/a678bd4e/addons/web_kanban/static/src/js/kanban_record.js#L102>`_)

context

當前上下文來自操作,并且在嵌入表單視圖的看板視圖中,還包括 one2many 或 many2many 字段

user_context

不言自明

read_only_mode

不言自明

selection_mode

當從 m2o/m2m 字段選擇記錄時,在移動環境中打開看板視圖時設置為 true。

注解

在移動環境中點擊m2o/m2m字段會打開看板視圖

按鈕和字段

雖然大多數看板模板都是標準的 QWeb模板 ,但是看板視圖會特別處理 field 、 buttona 元素:

  • 默認情況下,字段將被其格式化值替換,除非指定了 widget 屬性,在這種情況下,它們的呈現和行為取決于相應的小部件??赡艿闹蛋ǎǖ幌抻冢?/p>

    handle

    對于按照記錄排序的“序列”(或“整數”)字段,允許拖放記錄以重新排序。

  • 帶有 type 屬性的按鈕和鏈接將執行Odoo相關操作,而不是它們的標準HTML功能??赡艿念愋桶ǎ?/p>

    action , object

    對于 Odoo 按鈕 的標準行為,可以使用大多數與標準 Odoo 按鈕相關的屬性。

    open

    以只讀模式在表單視圖中打開卡片記錄

    edit

    以可編輯模式打開卡片記錄的表單視圖

    delete

    刪除卡片記錄并移除卡片

如果您需要擴展看板視圖,請參見: :js KanbanRecord 。

列表?

列表視圖的根元素是 <tree> 2。列表視圖的根元素可以具有以下屬性:

editable

默認情況下,選擇列表視圖的行會打開相應的 表單視圖 。 editable 屬性使列表視圖本身可以就地編輯。

有效值為 topbottom ,分別將 記錄顯示在列表的頂部或底部。

內聯 表單視圖 的架構源自列表視圖。大多數適用于 表單視圖 的字段和按鈕的屬性也被列表視圖接受,盡管如果列表視圖不可編輯,這些屬性可能沒有任何意義。

注解

如果 edit 屬性設置為 false ,則 editable 選項將被忽略。

multi_edit

可編輯或不可編輯的列表可以通過定義 multi_edit=1 來激活多編輯功能。

default_order

覆蓋視圖的排序方式,替換模型的排序方式 ( _order 模型屬性)。值是由逗號分隔的字段列表,可以在字段名后加上 desc 以按相反順序排序:

<tree default_order="sequence,name desc">
    ...
</tree>
decoration-{$name}

允許根據相應記錄的屬性更改行文本的樣式。

{$name} 可以是 bf ( font-weight: bold ), it ( font-style: italic ),或任何 bootstrap contextual color`_( ``danger` , info , muted , primary , successwarning )。

create , edit , delete , import , export_xlsx

通過將相應的屬性設置為 false ,可以 禁用 視圖中的相應操作

limit

頁面的默認大小。必須是正整數。

groups_limit

當列表視圖被分組時,每頁默認的組數。必須是一個正整數。

expand

當列表視圖被分組時,如果設置為true(默認值為false),自動打開第一級分組

列表視圖的可能子元素包括:

button

在列表單元格中顯示一個按鈕

icon

用于顯示按鈕的圖標

string
  • 如果沒有 icon ,則為按鈕的文本

  • 如果有 icon ,則需要為其提供 alt 文本

type

按鈕類型,指示單擊它如何影響Odoo:

object

調用列表模型上的方法。按鈕的“name”是方法名,該方法使用當前行的記錄ID和當前上下文進行調用。

action

加載并執行一個 ir.actions ,按鈕的 name 是動作的數據庫 ID。上下文會擴展為列表的模型(作為 active_model )、當前行的記錄( active_id )以及所有當前加載在列表中的記錄( active_ids ,可能只是匹配當前搜索的數據庫記錄的子集)。

name

請參見 type

args

請參見 type

attrs

基于記錄值的動態屬性。

將屬性映射到域,域在當前行記錄的上下文中進行評估,如果為 True ,則在單元格上設置相應的屬性。

可能的屬性是 invisible (隱藏按鈕)。

states

縮寫為 invisible attrs : 一個由狀態組成的逗號分隔列表,要求模型有一個 state 字段并且在視圖中使用。

如果記錄不在列出的狀態之一,則使按鈕“不可見”

危險

在使用 attrsstates 結合時,可能會導致意外的結果,因為域會與邏輯 AND 結合。

context

在執行按鈕的Odoo調用時合并到視圖上下文中

field

定義一個列,其中應為每個記錄顯示相應的字段??梢允褂靡韵聦傩裕?/p>

name

當前模型中要顯示的字段名稱。每個視圖中只能使用一個給定名稱。

string

字段列的標題(默認情況下,使用模型字段的 string

invisible

獲取并存儲字段,但不在表格中顯示該列。對于不應該顯示但被例如“@colors”使用的字段是必要的。

groups

列出應該能夠看到該字段的用戶組

widget

字段顯示的備選表示??赡艿牧斜硪晥D值包括(但不限于):

progressbar

float 字段顯示為進度條。

handle

對于按照記錄排序的“sequence”(或“integer”)字段,不顯示字段的值,而是顯示一個拖放圖標以重新排序記錄。

sum , avg

在列底部顯示相應的聚合。聚合僅在 當前顯示的 記錄上計算。聚合操作必須與相應字段的 group_operator 匹配。

attrs

基于記錄值的動態屬性。僅影響當前字段,例如 invisible 將隱藏該字段,但會保留其他記錄的同一字段可見,它不會隱藏列本身。

width (for editable )

當列表中沒有數據時,可以通過設置此屬性來強制設置列的寬度。值可以是絕對寬度(例如 ‘100px’)或相對權重(例如 ‘3’,表示此列將比其他列大3倍)。請注意,當列表中有記錄時,我們會讓瀏覽器根據它們的內容自動調整列的寬度,因此此屬性將被忽略。

decoration-{$name}

允許根據相應記錄的屬性更改單元格文本的樣式。

{$name} 可以是 bf ( font-weight: bold ), it ( font-style: italic ),或任何 bootstrap contextual color`_( ``danger` , info , muted , primary , successwarning )。

nolabel

如果設置為 “1”,則列標題將保持為空。此外,該列將無法進行排序。

注解

如果列表視圖是“可編輯”的,那么來自 表單視圖 的任何字段屬性也是有效的,并且將在設置內聯表單視圖時使用。

注解

在列表子視圖中(在表單視圖中顯示的One2many/Many2many),屬性 column_invisible 可以根據父對象隱藏列。

<field name="product_is_late" attrs="{'column_invisible': [('parent.has_late_products', '=', False)]}"/>

注解

當列表視圖被分組時,數值字段會被聚合并顯示在每個組中。此外,如果一個組中有太多的記錄,會在組行右側出現一個分頁器。因此,在列表視圖可以被分組的情況下,不建議將數值字段放在最后一列(但對于表單視圖中的x2many字段來說是可以的,因為它們無法被分組)。

groupby

當在 many2one 字段上對記錄進行分組時,為當前視圖定義自定義標題(帶有按鈕)。還可以在 groupby 中添加 field ,用于修飾符。因此,這些字段屬于 many2one comodel。這些額外的字段將被批量獲取。

name

當前模型中many2one字段的名稱。當按此字段名稱對視圖進行分組時,將顯示自定義標題。

<groupby name="partner_id">
  <field name="name"/> <!-- name of partner_id -->
  <button type="edit" name="edit" string="Edit"/>
  <button type="object" name="my_method" string="Button1"
    attrs="{'invisible': [('name', '=', 'Georges')]}"/>
</groupby>

可以定義一個特殊的按鈕( type="edit" ),用于打開many2one表單視圖。

control

為當前視圖定義自定義控件。

如果父級“樹形”視圖在One2many字段內部,則這是有意義的。

不支持任何屬性,但可以有子元素:

create

在當前列表中添加一個按鈕以創建新元素。

注解

如果定義了任何 create ,它將覆蓋默認的“添加行”按鈕。

支持以下屬性:

string (必填)

按鈕上顯示的文本。

context

當檢索新記錄的默認值時,此上下文將與現有上下文合并。

例如,它可以用于覆蓋默認值。

以下示例將通過將默認的“添加一行”按鈕替換為3個新按鈕:“添加產品”,“添加部分”和“添加注釋”來進行覆蓋。

“添加產品”將把“顯示類型”字段設置為默認值。

另外兩個按鈕將分別將字段“display_type”設置為“line_section”和“line_note”。

<control>
  <create
    string="Add a product"
  />
  <create
    string="Add a section"
    context="{'default_display_type': 'line_section'}"
  />
  <create
    string="Add a note"
    context="{'default_display_type': 'line_note'}"
  />
</control>
2

由于歷史原因,它起源于樹形視圖,后來被重新用于更多的表格/列表類型顯示

地圖?

Enterprise feature

此視圖能夠在地圖上顯示記錄和它們之間的路線。記錄由圖釘表示。它還允許在與記錄圖釘相關聯的彈出窗口中可視化模型中的字段。

注解

應用該視圖的模型應包含一個 res.partner many2one 字段,因為該視圖依賴于 res.partner 的地址和坐標字段來定位記錄。

API?

該視圖使用位置數據平臺的API獲取瓦片(地圖的背景),進行地理轉發(將地址轉換為一組坐標)并獲取路線。該視圖實現了兩個API,OpenStreetMap和MapBox。默認情況下使用OpenStreetMap,能夠獲取 瓦片`_并進行 `地理轉發。該API不需要令牌。只要在常規設置中提供有效的 `MapBox`_令牌,視圖就會切換到MapBox API。該API更快,可以計算路線??梢酝ㄟ^ `注冊`_MapBox來獲得令牌。

結構組件?

視圖的根元素是 <map> 。它可以具有以下屬性:

res_partner

包含 res.partner 的 many2one 字段。如果未提供,則視圖將創建一個空地圖。

default_order

如果提供了一個字段,視圖將覆蓋模型的默認順序。該字段必須是應用視圖的模型的一部分,而不是來自于 res.partner 。

routing

如果為 1 ,則顯示記錄之間的路線。視圖需要有效的 MapBox 令牌和至少兩個已定位的記錄(即記錄具有 res.partner many2one 并且合作伙伴具有地址或有效坐標)。

hide_name

如果為 1 ,則從標記的彈出窗口中隱藏名稱(默認值為 0 )。

hide_address

如果為 1 ,則從標記的彈出窗口中隱藏地址(默認值為 0 )。

hide_title

如果為 1 ,則從固定列表中隱藏標題(默認值為 0 )。

panel_title

在固定列表中顯示的標題字符串。如果未提供,則標題為操作的名稱或如果視圖不在操作中,則為“Items”。

limit

最大獲取記錄數(默認值:80)。必須是正整數。

<map> 元素可以包含多個 <field> 元素。每個 <field> 元素被解釋為大頭針彈出窗口中的一行。字段的屬性如下:

name

要顯示的字段。

string

字段內容前要顯示的字符串。它可以用作描述。

例如,這里是一張地圖:
<map res_partner="partner_id" default_order="date_begin" routing="1" hide_name="1">
    <field name="partner_id" string="Customer Name"/>
</map>

透視表?

透視圖用于將聚合數據可視化為 透視表。它的根元素是 <pivot> ,可以使用以下屬性:

disable_linking (可選)

將其設置為 1 以刪除表格單元格與列表視圖的鏈接。

display_quantity (可選)

將其設置為 1 以默認顯示數量列。

default_order (可選)

在視圖中使用的默認順序(升序或降序)的度量名稱。

<pivot default_order="foo asc">
   <field name="foo" type="measure"/>
</pivot>

在透視圖中,唯一允許的元素是 field ,它可以具有以下屬性:

name (必填)

視圖中要使用的字段名稱。如果用于分組(而不是聚合),請使用此字段。

string (可選)

將用于在數據透視表視圖中顯示字段的名稱,覆蓋字段的默認 Python 字符串屬性。

type (可選)

指示該字段應該作為分組標準還是在組內作為聚合值使用??赡艿闹禐椋?/p>

row (默認)

按指定字段分組,每個組都有自己的行。

col

創建列分組

measure

在分組內聚合的字段

interval

在日期和日期時間字段上,按指定的間隔( day 、 week 、 month 、 quarteryear )分組,而不是按特定的日期時間(固定秒分辨率)或日期(固定天分辨率)分組。

invisible (可選)

如果為真,則該字段既不會出現在活動度量中,也不會出現在可選擇的度量中(對于不適合聚合的字段非常有用,例如不同單位的字段,例如 € 和 $)。

度量值是從模型字段自動生成的;只使用可聚合字段。這些度量值也按字段字符串的字母順序排序。

警告

與圖形視圖一樣,數據透視表在數據庫內容上聚合數據,這意味著非存儲函數字段不能在數據透視表視圖中使用。

在透視視圖中, field 可以有一個 widget 屬性來指定其格式。該小部件應該是一個字段格式化程序,其中最有趣的是 date 、 datetime 、 float_timemonetary 。

例如,可以將時間表透視圖定義為:

<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視圖有兩種用途:

  • 它們可以用作前端模板,此時應使用 template 作為快捷方式。

  • 它們可以被用作實際的qweb視圖(在操作內打開),在這種情況下,它們應該被定義為具有顯式 類型 (它不能被推斷)和模型的常規視圖。

qweb-as-view 相對于基本的 qweb-as-template 的主要增強功能包括:

  • qweb-as-view 對于帶有 CSS 類 o_qweb_cp_buttons<nav> 元素有一個特殊情況:它的內容應該是按鈕,并且將被提取并移動到控制面板的按鈕區域, <nav> 本身將被刪除,這是一個解決控制面板視圖尚不存在的方法

  • qweb-as-view 渲染會在標準 qweb 渲染上下文中添加幾個項目:

    model

    綁定到 qweb 視圖的模型

    domain

    搜索視圖提供的域

    context

    搜索視圖提供的上下文

    records

    一個懶惰的代理,指向 model.search(domain) ,如果您只想迭代記錄而不執行更復雜的操作(例如分組),則可以使用它。

  • qweb-as-view 還提供了額外的渲染鉤子:

    • _qweb_prepare_context(view_id, domain) 準備與 qweb-as-view 特定的渲染上下文

    • qweb_render_view(view_id, domain) 是由客戶端調用的方法,它將調用上下文準備方法,最終調用 env['ir.qweb'].render() 。

搜索默認值?

可以通過操作的 context 使用 search_default_name 鍵來配置搜索字段和過濾器。對于字段,值應該是要設置的字段值,對于過濾器,它是一個布爾值或數字。例如,假設 foo 是一個字段, bar 是一個過濾器,那么操作上下文為:

{
  'search_default_foo': 'acro',
  'search_default_bar': 1
}

將自動啟用 bar 過濾器,并搜索 foo 字段以查找 acro 。

可以使用數字值(介于1和99之間)來描述默認分組的順序。例如,如果“foo”和“bar”是兩個分組,則可以使用數字值來描述它們的順序。

{
  'search_default_foo': 2,
  'search_default_bar': 1
}

會先激活 bar 然后再激活 foo 。