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

資訊專欄INFORMATION COLUMN

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

Lionad-Morotar / 1998人閱讀

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

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

窗口動作

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

    
    
        待辦事項(xiàng)
        todo.task
        form
        tree,form
        current
    

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

res_model:要打開的視圖(窗口)關(guān)聯(lián)的數(shù)據(jù)模型

view_type:視圖類型,默認(rèn)值為 form,一般情況下我們?nèi)∧J(rèn)值就可以了

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

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

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

view_ids:關(guān)聯(lián)的視圖對象 id,需注意區(qū)分和 view_id 的區(qū)別

view_id:關(guān)聯(lián)的視圖的 id, 例如在不同時(shí)候需要打開同一個(gè)數(shù)據(jù)模型不同的表單視圖,就可以通過這個(gè)字段指定要打開的視圖的 id

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

context:傳遞到上下文中的數(shù)據(jù),一個(gè)字典

domain:過濾規(guī)則,對視圖中的記錄進(jìn)行過濾

limit:列表中每頁顯示的記錄數(shù)量,默認(rèn)為 80

search_view_id:指定搜索視圖,不指定則按默認(rèn)規(guī)則加載

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

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

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

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

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

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

這里需要強(qiáng)調(diào)一點(diǎn)的是,如果我們在某些時(shí)候需要直接通過 Python 代碼或 JS 代碼打開一個(gè)窗口動作,此時(shí)我們將需要自己添加 views 字段,否則將會拋出錯(cuò)誤,具體的實(shí)例我們將在之后使用到了再進(jìn)行講解分析。

服務(wù)器動作

Server Action 可以在服務(wù)端執(zhí)行復(fù)雜的邏輯代碼,是非常強(qiáng)大的一種動作類型。我們先給代辦事項(xiàng)添加一個(gè) Server Action 用于快速完成任務(wù)的動作,這樣我們就不用每次都要點(diǎn)進(jìn)去一個(gè)任務(wù)然后進(jìn)入編輯狀態(tài)再勾選保存這么多步驟了。

我們來看看定義一個(gè)最簡單的 Server Action 應(yīng)該包含哪些內(nèi)容:

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

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

model_id:當(dāng)前的動作是在哪個(gè)模型上運(yùn)行的

binding_model_id:綁定的模型,當(dāng)前動作將會出現(xiàn)在綁定的模型的視圖中

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

code:對應(yīng) state 的類型 code,為當(dāng)前動作運(yùn)行時(shí)所要執(zhí)行的 Python 代碼

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

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

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

env:Odoo 的運(yùn)行環(huán)境

model:動作觸發(fā)時(shí)對應(yīng)的 Odoo 模型實(shí)例

record:動作觸發(fā)時(shí)對應(yīng)的單個(gè)記錄(如在表單視圖中運(yùn)行對應(yīng)當(dāng)前表單所指向的記錄),可能是空的

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

Python 庫:time, datetime, dateutil, timezone 時(shí)間相關(guān)的 Python 庫

log:用來記錄日志信息

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

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

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

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

受限于篇幅,我們這里只涉及了 statecode 類型的服務(wù)器動作,相對其他三種類型,已經(jīng)足以應(yīng)付絕大多數(shù)場景的需求了,這里就不展開細(xì)說,感興趣的同學(xué)可以看看官方模塊的相關(guān)實(shí)現(xiàn),要學(xué)會看源碼哈!

URL 動作

URL Action 用來打開一個(gè)網(wǎng)頁鏈接,十分簡單的一種動作類型:

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

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

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

url:要打開的目標(biāo)頁面的鏈接,可以是外部頁面也可以是同域下的內(nèi)部頁面

客戶端動作

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

    
        Dashboard
        backend_dashboard
    

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

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

target:同窗口動作

context:同窗口動作

params:傳遞給客戶端動作的參數(shù),一個(gè)字典

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

報(bào)表動作

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

瞎說幾句

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

上面沒有展開細(xì)說的內(nèi)容,希望大家可以多多翻看官方模塊的實(shí)現(xiàn),學(xué)會閱讀源碼才是最好的學(xué)習(xí)方式。

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/42482.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    xiyang 評論0 收藏0

發(fā)表評論

0條評論

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