国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

「Odoo 基礎教程系列」第六篇——從 Todo 應用開始(5)

Lionad-Morotar / 2003人閱讀

摘要:大家好鴨,我又來更新啦還記得我們在第二篇教程中提到過的動作嗎,今天我們就來專門講講在中的,學習不同類型的動作對應的應用場景,并且在我們的應用中使用上其中一些類型的動作。報表動作這類型的動作用于觸發報表打印,例如打印發票等。

大家好鴨,我又來更新啦!還記得我們在第二篇教程中提到過的動作(actions)嗎,今天我們就來專門講講在 Odoo 中的 action,學習不同類型的動作對應的應用場景,并且在我們的 Todo 應用中使用上其中一些類型的動作。

窗口動作

窗口動作在 Odoo 中是最常見也是最常用的動作類型,在第二篇教程中我們創建菜單的時候就已經用過窗口動作了,我們打開 menus.xml 來看看一個窗口動作的組成:

    
    
        待辦事項
        todo.task
        form
        tree,form
        current
    

這里的 model 之前我們也說過,對應的是這個動作的類型(每個類型的動作都對應一個模型),我們重點來看看下面列出的字段以及沒有列出來的字段,分別說明一下它們各自的作用。

res_model:要打開的視圖(窗口)關聯的數據模型

view_type:視圖類型,默認值為 form,一般情況下我們取默認值就可以了

view_mode:允許打開的視圖類型,以逗號分隔,默認值為 tree,form

target:打開的窗口類型,常用的有 current(當前窗口打開)和 new (彈窗打開)這兩種,默認為 current

除了上述列出的一些字段外,還有一些非必填的字段在某些時候我們是會用上的,這里也分列出來:

view_ids:關聯的視圖對象 id,需注意區分和 view_id 的區別

view_id:關聯的視圖的 id, 例如在不同時候需要打開同一個數據模型不同的表單視圖,就可以通過這個字段指定要打開的視圖的 id

res_id:僅在視圖類型為 form 時有效,表示打開該 id 對應的記錄的表單視圖,如未指定則打開新建頁面

context:傳遞到上下文中的數據,一個字典

domain:過濾規則,對視圖中的記錄進行過濾

limit:列表中每頁顯示的記錄數量,默認為 80

search_view_id:指定搜索視圖,不指定則按默認規則加載

multi:如果設置為 True 且動作綁定了模型(src_model)的話,該動作按鈕會只出現在所綁定模型列表視圖的「動作」下拉列表中(在搜索視圖左側)

views:由 (view_id, view_type) 這樣的元組對組成的列表,view_id 為指定視圖的 id 或是 False(按默認值取出對應視圖),view_type 表示視圖類型

其中 views 是一個計算字段,該字段會根據 view_ids, view_modeview_id 自動計算出來,大致分為三個步驟:

view_ids 中順序取出 id 和視圖類型,組成 (view_id, view_type) 元組對加入到 views 列表中

若定義了 view_id 且對應的視圖類型不在 view_ids 中,則加入到 views

最后對 view_mode 中指定的視圖類型,但是不存在于 view_idsview_id 中,則將其 view_id 置為 False 組成元組對后加入到 views

這里需要強調一點的是,如果我們在某些時候需要直接通過 Python 代碼或 JS 代碼打開一個窗口動作,此時我們將需要自己添加 views 字段,否則將會拋出錯誤,具體的實例我們將在之后使用到了再進行講解分析。

服務器動作

Server Action 可以在服務端執行復雜的邏輯代碼,是非常強大的一種動作類型。我們先給代辦事項添加一個 Server Action 用于快速完成任務的動作,這樣我們就不用每次都要點進去一個任務然后進入編輯狀態再勾選保存這么多步驟了。

我們來看看定義一個最簡單的 Server Action 應該包含哪些內容:

    
    
        標記完成
        
        
        code
        records.write({"is_done": True})
    

和其他所有在數據文件(XML)中定義的數據一樣,首先是一個包含屬性 idmodel 標簽,我們要定義的是 Server Action, 所以需要將 model 設置為 ir.actions.server,然后是對應 Server Action 模型下的一些字段:

model_id:當前的動作是在哪個模型上運行的

binding_model_id:綁定的模型,當前動作將會出現在綁定的模型的視圖中

state:服務器動作的類型,總共有 4 種可選的類型,分別是 code(執行 Python 代碼),object_create(創建一條新記錄),object_write(更新記錄),multi(執行多個動作)

code:對應 state 的類型 code,為當前動作運行時所要執行的 Python 代碼

大家應該都留意到了在上面的定義中出現了一個屬性 ref,如果我沒有理解錯,它應該是 reference 的縮寫,它的值是一個外部 ID(external id),我們上面定義的這個動作的外部 ID 就是定義時添加的 id 屬性的值 action_mark_todo_task_done,它指向一條具體的記錄(就像 Many2one 字段一樣)。

我們定義的所有模型都會在 ir.model.data 對應的表中存在相應的記錄,這些模型的外部 ID 形如 model_model_name,其中 model_name 是將模型名 [model.name](http://model.name). 替換成 _,例如我們的 todo.task 模型的外部 ID 就是前綴 model_ 加上 todo_task 組成的 model_todo_task 了。

接下來我們再看到字段 code 里面的內容,在這里面我們有一些變量是可以直接使用的:

env:Odoo 的運行環境

model:動作觸發時對應的 Odoo 模型實例

record:動作觸發時對應的單個記錄(如在表單視圖中運行對應當前表單所指向的記錄),可能是空的

records:動作觸發時對應的記錄集(如在列表視圖中勾選多條記錄觸發,記錄集指向這些選中的記錄),可能是空的

Python 庫:time, datetime, dateutil, timezone 時間相關的 Python 庫

log:用來記錄日志信息

Warning:通過 raise Warning("xxxxx") 拋出警告信息

除了上述可以直接使用的變量外,還有一個 action 變量,當我們想讓當前動作執行完畢之后,返回一個新的動作繼續執行,就可以將返回的動作的定義(一個字典)賦值給變量 action,客戶端將會自動執行該動作。

OK, 前面說了這么多,我們更新一下代碼,然后刷新瀏覽器看看效果吧:

在列表視圖中,當我們勾選了任意的記錄后,將會出現一個「動作」菜單,打開之后就可以看到我們剛剛定義的「標記完成」這個 Server Action 了,試試看執行會發生什么,注意觀察「已完成?」這一列的變化。然后再創建一條新的記錄,在表單頁面中,同樣有「動作」菜單,我們在這里也可以執行「標記完成」的動作,怎么樣,是不是比原本的編輯再勾選再保存要方便得多了,而且我們還能在列表里勾選多條記錄進行批量操作,不能更方便了!

受限于篇幅,我們這里只涉及了 statecode 類型的服務器動作,相對其他三種類型,已經足以應付絕大多數場景的需求了,這里就不展開細說,感興趣的同學可以看看官方模塊的相關實現,要學會看源碼哈!

URL 動作

URL Action 用來打開一個網頁鏈接,十分簡單的一種動作類型:

    
        打開谷歌
        new
        https://google.com
    

上面這個動作觸發后將會新開瀏覽器窗口(或新標簽)打開谷歌首頁,主要的兩個字段如下:

target:有兩個可選值,分別是新窗口(new)打開鏈接,相當于 ,以及當前窗口(self)打開,相當于

url:要打開的目標頁面的鏈接,可以是外部頁面也可以是同域下的內部頁面

客戶端動作

觸發一個完全由客戶端(瀏覽器)執行的動作,例如某些模塊的「儀表板」就屬于 Client Action,它的基本組成如下:

    
        Dashboard
        backend_dashboard
    

上面這個 Client Action 是在 Odoo 自帶模塊 website 中定義,用來打開儀表板,來看看客戶端動作有哪些字段是可用的:

tag:客戶端動作的標識,需要是在 action_registry 中注冊了的動作

target:同窗口動作

context:同窗口動作

params:傳遞給客戶端動作的參數,一個字典

客戶端動作的本體實際上是 tag 所指向的動作,這個動作是用 JS 編寫的一些邏輯(在 Odoo 的 JS 框架下),在之后會有專門的教程教大家相關的內容,這里請先略過。

報表動作

這類型的動作用于觸發報表打印,例如打印發票等。這里不對該類型作介紹,感興趣的同學同樣可以去看看 Odoo 自帶的一些模塊如 account 等。

瞎說幾句

在實際開發中,最常接觸和使用的動作基本上就窗口動作(ir.actions.act_window)和服務器動作(ir.actions.server)這兩種了,其中 Server Action 最復雜也最強大,可以用它來實現很多的功能。

上面沒有展開細說的內容,希望大家可以多多翻看官方模塊的實現,學會閱讀源碼才是最好的學習方式。

教程中的代碼會更新在 GitHub 倉庫「Odoo-Tutorial-Demo」中,如果遇到什么問題,歡迎提出,我會及時解答 ;-)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/42482.html

相關文章

  • Odoo 基礎教程系列」第二篇—— Todo 應用開始(1)

    摘要:雖然這是個很簡單的應用,但是希望大家可以動手一起操作,從最簡單的開始上手學習如何使用這個框架。則是在和之間,負責響應用戶操作,從中獲取數據進行處理并返回到中。 showImg(https://segmentfault.com/img/bV66tE?w=728&h=410); 在第一篇教程發布之后差不多一個月的今天,終于完成了第二篇內容,這個發布周期拖得實在是有點太長了,我都覺得不好意思...

    UCloud 評論0 收藏0
  • Odoo 基礎教程系列」第三篇—— Todo 應用開始(2)

    摘要:現在我們來給待辦事項增加一個緊急程度的字段,用來表示當前任務的優先級。此處我們還給這個字段添加了默認值,表示當一個待辦事項被創建后,如果沒有指定緊急程度,將默認是待辦狀態。這篇教程中的代碼同樣會更新在我的倉庫中。 showImg(https://segmentfault.com/img/bVbfv3E?w=1330&h=912); 在這篇教程里我們將會了解到 Odoo 模型里的一些其他...

    iflove 評論0 收藏0
  • Odoo 基礎教程系列」第七篇—— Todo 應用開始(6)

    摘要:今天這個系列教程即將迎來它的最后一篇內容了,我們將要來學習中權限相關的內容。在的權限管理體系中,同樣也有用戶組這一概念的存在,和其他框架如可以說大同小異。通常和權限相關的內容,我們都會在模塊的目錄下進行定義,記錄集規則的定義自然也不例外。 在今年的情人節(2018.02.14)那天,我寫了一篇博客說即將要開一個坑,也就是大家在看的這個系列的教程。今天這個系列教程即將迎來它的最后一篇內容...

    zeyu 評論0 收藏0
  • Odoo 基礎教程系列」第四篇—— Todo 應用開始(3)

    摘要:在這一篇教程中,將會涉及到外鍵字段,可以將兩個模型關聯起來,然后很方便地獲取到對應的數據。關聯字段這一小節里,我們會給待辦事項加上分類,并且這個分類可以讓用戶自己創建維護。今天這篇教程的內容就先到這里了,教程中的代碼會更新在我的倉庫中。 showImg(https://segmentfault.com/img/bVbfzvt?w=1280&h=795); 在這一篇教程中,將會涉及到外鍵...

    HollisChuang 評論0 收藏0
  • Odoo 基礎教程系列」第五篇—— Todo 應用開始(4)

    摘要:在前面教程中,我們使用了兩種類型的視圖和今天我們將學習使用另一種類型的視圖搜索視圖。大家可以試試看同時應用多個分組,或者將分組和過濾器組合使用,仔細觀察和思考產生的結果。還是老規矩,教程中的代碼會更新在倉庫中。 showImg(https://segmentfault.com/img/bVbgO85?w=1950&h=1300); 在前面教程中,我們使用了兩種類型的視圖——TreeVi...

    xiyang 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<