第六章:終于有一些界面可以玩了?

現在我們已經創建了新的 模型 和相應的 訪問權限 ,現在是時候與用戶界面進行交互了。

在本章結束時,我們將創建一些菜單以便訪問默認的列表和表單視圖。

數據文件(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

操作可以通過三種方式觸發:

  1. 通過點擊菜單項(鏈接到特定操作)

  2. 通過在視圖中點擊按鈕(如果這些按鈕連接到操作)

  3. 作為對象上下文操作

本章節只涵蓋第一種情況。第二種情況將在 后續章節 中介紹,而最后一種情況則是一個高級主題的重點。在我們的房地產示例中,我們希望將菜單鏈接到 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 創建一個操作。

重啟服務器,您應該可以在日志中看到文件已加載。

字段,屬性和視圖?

注解

目標 : 完成本節后,銷售價格應為只讀,臥室數量和可用日期應具有默認值。此外,在復制記錄時,不會復制銷售價格和可用日期的值。

模型和視圖之間的交互

保留字段 activestate 已添加到 estate.property 模型中。

到目前為止,我們只使用了通用視圖來展示我們的房地產廣告,但在大多數情況下,我們希望對視圖進行微調。Odoo中有許多微調選項,但通常的第一步是確保:

  • 一些字段有默認值

  • 一些字段是只讀的

  • 復制記錄時某些字段未被復制

在我們的房地產業務案例中,我們希望以下內容:

  • 售價應該是只讀的(稍后將自動填寫)

  • 在復制記錄時,不應復制可用日期和銷售價格

  • 默認臥室數量應為2

  • 默認可用日期應為3個月后

一些新屬性?

在繼續進行視圖設計之前,讓我們回到我們的模型定義。我們看到一些屬性,例如 required=True ,會影響數據庫中的表結構。其他屬性將影響視圖或提供默認值。

Exercise

向字段添加新屬性。

查找適當的屬性(參見: Field ),以便:

  • 將銷售價格設置為只讀

  • 防止復制可用日期和銷售價格的值

重啟服務器并刷新瀏覽器。您將無法設置任何銷售價格。復制記錄時,可用日期應為空。

默認值?

任何字段都可以給定默認值。在字段定義中,添加選項 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

設置默認值。

添加適當的默認屬性,以便:

  • 默認臥室數量為2

  • 默認可用日期為3個月后

提示:這可能會對你有所幫助: today()

檢查默認值是否設置如預期。

保留字段?

參考 : 有關此主題的文檔可以在 保留字段名稱 中找到。

一些字段名稱被預定義為特定行為。當相關行為被需要時,它們應該在模型上進行定義。

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客戶端為了提高性能而緩存了各種菜單和視圖,因此需要刷新。