第七章:基本視圖?

我們在 上一章節 中已經看到,Odoo 能夠為給定的模型生成默認視圖。實際上,對于商業應用程序來說,缺省視圖 永遠不是 可接受的。相反,我們至少應該以一種邏輯方式組織各個字段。

視圖在 XML 文件中定義,包含操作和菜單。它們是 ir.ui.view 模型的實例。

在我們的房地產模塊中,我們需要以邏輯方式組織字段:

  • 在列表(樹形)視圖中,我們希望顯示更多內容,而不僅僅是名稱。

  • 在表單視圖中,字段應該被分組。

  • 在搜索視圖中,我們必須能夠搜索更多的內容,而不僅僅是名稱。具體來說,我們想要一個“可用”屬性的過濾器和一個按郵政編碼分組的快捷方式。

列表?

參考 : 有關此主題的文檔可以在 列表 中找到。

注解

目標 :本節結束時,列表視圖應如下所示:

列表視圖

列表視圖,也稱為樹形視圖,以表格形式顯示記錄。

它們的根元素是 <tree> 。這個視圖的最基本版本只是簡單地列出要在表格中顯示的所有字段(每個字段都是一列):

<tree string="Tests">
    <field name="name"/>
    <field name="last_seen"/>
</tree>

一個簡單的例子可以在 這里 找到。

Exercise

添加自定義列表視圖。

在適當的 XML 文件中為 estate.property 模型定義一個列表視圖。查看本節的 **目標 ** 以獲取要顯示的字段。

小費:

  • 不要添加 editable="bottom" 屬性,你可以在上面的例子中找到。我們稍后會回到它。

  • 一些字段標簽可能需要調整以匹配參考。

像往常一樣,您需要重新啟動服務器(不要忘記 -u 選項)并刷新瀏覽器以查看結果。

警告

在本章中,您可能會使用一些復制粘貼操作,因此請確保每個視圖的“id”保持唯一!

表單?

參考 : 有關此主題的文檔可以在 表單 中找到。

注解

目標 :本節結束時,表單視圖應如下所示:

表單視圖

表單用于創建和編輯單個記錄。

它們的根元素是 <form> 。它們由高級結構元素(組和筆記本)和交互元素(按鈕和字段)組成:

<form string="Test">
    <sheet>
        <group>
            <group>
                <field name="name"/>
            </group>
            <group>
                <field name="last_seen"/>
            </group>
            <notebook>
                <page string="Description">
                    <field name="description"/>
                </page>
            </notebook>
        </group>
    </sheet>
</form>

您可以使用常規的HTML標簽,例如 divh1 ,以及 class 屬性(Odoo提供了一些內置類)來精細調整外觀。

一個簡單的例子可以在 這里 找到。

Exercise

添加自定義表單視圖。

在適當的 XML 文件中為 estate.property 模型定義一個表單視圖。查看本節的 目標 ,了解頁面的預期最終設計。

這可能需要一些試錯才能達到預期的結果;-)建議您逐個添加字段和標簽,以幫助理解其工作原理。

為了避免每次修改視圖時都要重新啟動服務器,可以在啟動服務器時使用 --dev xml 參數,這樣會更方便:

$ ./odoo-bin --addons-path=../custom,../enterprise/,addons -d rd-demo -u estate --dev xml

該參數允許您只需刷新頁面即可查看您的視圖修改。

域名?

參考 : 有關此主題的文檔可以在 搜索域 中找到。

在Odoo中,域編碼記錄的條件:域是選擇模型記錄子集的條件列表。每個條件都是一個三元組,包括 字段 運算符 。如果指定的字段滿足運算符應用于值的條件,則記錄滿足條件。

例如,當在 產品 模型上使用時,以下域選擇所有單價大于 1000服務

[('product_type', '=', 'service'), ('unit_price', '>', 1000)]

默認情況下,條件使用隱式的AND組合,這意味著 每個 條件都需要滿足才能使記錄匹配域。邏輯運算符 & (AND), | (OR)和 ! (NOT)可用于顯式地組合條件。它們在前綴位置使用(運算符插入其參數之前而不是之間)。例如,要選擇產品“是服務 具有單位價格 不在 1000和2000之間”的條件:

['|',
    ('product_type', '=', 'service'),
    '!', '&',
        ('unit_price', '>=', 1000),
        ('unit_price', '<', 2000)]

Exercise

添加篩選和分組。

應該添加以下內容到之前創建的搜索視圖中:

  • 一個過濾器,顯示可用的屬性,即狀態應為“新”或“已收到報價”。

  • 按郵政編碼分組結果的能力。

看起來不錯吧?此時我們已經能夠創建模型并設計出符合業務邏輯的用戶界面。然而,還缺少一個關鍵組件:模型之間的 鏈接 。