第六章:終于有一些界面可以玩了?
現在我們已經創建了新的 模型 和相應的 訪問權限 ,現在是時候與用戶界面進行交互了。
在本章結束時,我們將創建一些菜單以便訪問默認的列表和表單視圖。
數據文件(XML)?
參考 : 有關此主題的文檔可以在 數據文件 中找到。
在 第五章:安全性 - 簡介 中,我們通過 CSV 文件添加了數據。當要加載的數據具有簡單格式時,CSV 格式很方便。當格式更復雜時(例如,加載視圖結構或電子郵件模板),我們使用 XML 格式。例如,這個 幫助字段 包含 HTML 標簽。雖然可以通過 CSV 文件加載這樣的數據,但使用 XML 文件更方便。
XML文件必須添加到與CSV文件相同的文件夾中,并在 __manifest__.py
中類似地定義。當安裝或更新模塊時,數據文件的內容也會按順序加載,因此CSV文件的所有備注也適用于XML文件。當數據鏈接到視圖時,我們將它們添加到 views
文件夾中。
在本章中,我們將通過一個XML文件加載我們的第一個操作和菜單。操作和菜單是數據庫中的標準記錄。
注解
當性能很重要時,CSV格式比XML格式更受歡迎。這在Odoo中是這種情況,因為加載CSV文件比加載XML文件更快。
在Odoo中,用戶界面(操作、菜單和視圖)主要通過創建和組合在XML文件中定義的記錄來定義。一個常見的模式是菜單>操作>視圖。為了訪問記錄,用戶需要通過多個菜單級別進行導航;最深層級是一個操作,它觸發打開記錄列表。
操作?
參考 : 有關此主題的文檔可以在 操作 中找到。
注解
目標 :本節結束時,系統應加載一個操作。我們在用戶界面上還看不到任何東西,但是文件應該已經在日志中加載:
INFO rd-demo odoo.modules.loading: loading estate/views/estate_property_views.xml
操作可以通過三種方式觸發:
通過點擊菜單項(鏈接到特定操作)
通過在視圖中點擊按鈕(如果這些按鈕連接到操作)
作為對象上下文操作
本章節只涵蓋第一種情況。第二種情況將在 后續章節 中介紹,而最后一種情況則是一個高級主題的重點。在我們的房地產示例中,我們希望將菜單鏈接到 estate.property
模型,以便我們能夠創建新記錄。動作可以視為菜單和模型之間的鏈接。
我們的 test.model
的基本操作是:
<record id="test_model_action" model="ir.actions.act_window">
<field name="name">Test action</field>
<field name="res_model">test.model</field>
<field name="view_mode">tree,form</field>
</record>
id
是一個 外部標識符 。它可以用來引用記錄(而不需要知道其在數據庫中的標識符)。model
的固定值為ir.actions.act_window
( 窗口操作 ( ir.actions.act_window ) ).name
是操作的名稱。res_model
是該操作所應用的模型。view_mode
是可用的視圖模式;在這種情況下,它們是列表(樹形)和表單視圖。我們將在 稍后 看到還有其他視圖模式。
Odoo 中到處都可以找到示例,但是 這個 是一個簡單操作的好例子。請注意 XML 數據文件的結構,因為您將在下一個練習中需要它。
Exercise
添加一個操作。
在適當的文件夾中創建 estate_property_views.xml
文件,并在 __manifest__.py
文件中定義它。
為模型 estate.property
創建一個操作。
重啟服務器,您應該可以在日志中看到文件已加載。
字段,屬性和視圖?
注解
目標 : 完成本節后,銷售價格應為只讀,臥室數量和可用日期應具有默認值。此外,在復制記錄時,不會復制銷售價格和可用日期的值。

保留字段 active
和 state
已添加到 estate.property
模型中。
到目前為止,我們只使用了通用視圖來展示我們的房地產廣告,但在大多數情況下,我們希望對視圖進行微調。Odoo中有許多微調選項,但通常的第一步是確保:
一些字段有默認值
一些字段是只讀的
復制記錄時某些字段未被復制
在我們的房地產業務案例中,我們希望以下內容:
售價應該是只讀的(稍后將自動填寫)
在復制記錄時,不應復制可用日期和銷售價格
默認臥室數量應為2
默認可用日期應為3個月后
一些新屬性?
在繼續進行視圖設計之前,讓我們回到我們的模型定義。我們看到一些屬性,例如 required=True
,會影響數據庫中的表結構。其他屬性將影響視圖或提供默認值。
重啟服務器并刷新瀏覽器。您將無法設置任何銷售價格。復制記錄時,可用日期應為空。
默認值?
任何字段都可以給定默認值。在字段定義中,添加選項 default=X
,其中 X
是 Python 字面值(布爾值、整數、浮點數、字符串)或一個接受模型并返回值的函數:
name = fields.Char(default="Unknown")
last_seen = fields.Datetime("Last Seen", default=lambda self: fields.Datetime.now())
name
字段默認值為 ‘Unknown’,而 last_seen
字段將設置為當前時間。
檢查默認值是否設置如預期。
保留字段?
參考 : 有關此主題的文檔可以在 保留字段名稱 中找到。
一些字段名稱被預定義為特定行為。當相關行為被需要時,它們應該在模型上進行定義。
Exercise
添加活動字段。
在 estate.property
模型中添加 active
字段。
重啟服務器,創建一個新的屬性,然后回到列表視圖…該屬性將不會被列出! active
是一個具有特定行為的保留字段的示例:當記錄具有 active=False
時,它會自動從任何搜索中刪除。要顯示創建的屬性,您需要專門搜索非活動記錄。

Exercise
為活動字段設置默認值。
設置適當的默認值,使 active
字段不再消失。
請注意,所有現有記錄都被分配了默認值 active=False
。
Exercise
添加狀態字段。
在 estate.property
模型中添加一個 state
字段。有五個可能的值:New,Offer Received,Offer Accepted,Sold 和 Canceled。它必須是必需的,不應該被復制,并且應該將其默認值設置為“New”。
確保使用正確的類型!
state
將在后續的幾個 UI 增強中使用。
現在我們能夠通過默認視圖與UI進行交互,下一步很明顯:我們想要定義 我們自己的視圖 。
- 1
由于Web客戶端為了提高性能而緩存了各種菜單和視圖,因此需要刷新。