摘要:在前面教程中,我們使用了兩種類型的視圖和今天我們將學(xué)習(xí)使用另一種類型的視圖搜索視圖。大家可以試試看同時(shí)應(yīng)用多個(gè)分組,或者將分組和過濾器組合使用,仔細(xì)觀察和思考產(chǎn)生的結(jié)果。還是老規(guī)矩,教程中的代碼會更新在倉庫中。
在前面教程中,我們使用了兩種類型的視圖——TreeView 和 FormView. 今天我們將學(xué)習(xí)使用另一種類型的視圖——SearchView, 搜索視圖。
搜索字段通過之前的實(shí)踐,我們應(yīng)該已經(jīng)知道 Odoo 會為我們的模型定義默認(rèn)的 TreeView 和 FormView 了吧,那對于我們今天要說的主角 SearchView 其實(shí)也是一樣的,我們打開任意一個(gè)列表視圖,都可以在列表的右上方看到有搜索框,除了能在搜索框里輸入文字進(jìn)行檢索外,點(diǎn)一下搜索框右側(cè)的放大鏡還能展開更多的搜索功能,包括過濾器(Filters),分組(Group By)以及收藏(Favorites),其中最常用的就是過濾器了,我們稍候?qū)v到。
默認(rèn)的搜索視圖只會對模型的 name 字段(或 _rec_name 指定的字段)進(jìn)行檢索,例如在我們的待辦事項(xiàng)列表中搜索,會看到搜索框下方自動(dòng)出現(xiàn)了搜索項(xiàng),這里的「描述」也就是我們的待辦事項(xiàng)模型 todo.task 的 name 字段了:
那我們?nèi)绻胱尅阜诸悺挂材苡糜诖k事項(xiàng)的搜索,該怎么做呢?我們接下來就打開視圖文件,先定義好搜索視圖的基本結(jié)構(gòu):
todo.task.view_filter todo.task ...
搜索視圖和列表視圖以及表單視圖一樣,都有相似的結(jié)構(gòu),唯一不同的就是在 arch 內(nèi)的部分。接下來我們要在
超簡單有沒有!只需要把想要被用于搜索的字段放到
升級一下模塊,在輸入框隨便輸入搜索內(nèi)容看看發(fā)生了什么變化:
還記得我們之前創(chuàng)建過「工作」這個(gè)分類嗎,在下面列出的「分類」的搜索結(jié)果中,點(diǎn)擊小三角符號,就會打開匹配到的相關(guān)結(jié)果。
過濾器我們再來看看 Odoo 的搜索視圖自帶的過濾器,點(diǎn)開之后我們只看到一個(gè)添加自定義過濾器的選項(xiàng),再點(diǎn)一下看看,出現(xiàn)了一些選項(xiàng):
我們試試隨意添加一些規(guī)則,然后點(diǎn)擊應(yīng)用,看看會有什么發(fā)生(我分別選擇了「緊急程度」「is」「普通」):
我們可以看到在搜索框中,應(yīng)用了這個(gè)過濾器,并且這個(gè)過濾器被添加到了過濾器的選項(xiàng)中,我們還可以再添加幾個(gè)過濾器試試看。
通過以上的操作,我們不難看出,這里的過濾器其實(shí)就是一個(gè)個(gè)過濾規(guī)則,而且我們可以同時(shí)應(yīng)用多個(gè)不同的規(guī)則。如果我們有大量的數(shù)據(jù),而我們想要快速篩選出特定的數(shù)據(jù)的話,就可以使用過濾器達(dá)到這個(gè)目的。
如果我們切換到其他菜單或者刷新頁面,就會發(fā)現(xiàn)之前應(yīng)用的過濾器,又消失了,如果我們在某些數(shù)據(jù)上需要高頻次進(jìn)行過濾操作的話,每次都要手動(dòng)添加過濾規(guī)則的話,就顯得十分不方便了,所以我們來看看怎么在搜索視圖中定義過濾器吧:
我們在
我們以「未完成」這個(gè)過濾器的 domain 為例,先不管條件是什么,先寫下一個(gè)空的列表 [],這里要記住了,只要是用到 domain 的地方,都先寫下一對中括號 [],因?yàn)閯偨佑|常常會因?yàn)樯賹懥死ㄌ柖鴮?dǎo)致程序出現(xiàn)錯(cuò)誤。
然后我們先不考慮邏輯前綴的事情,我們這里也暫時(shí)沒有用到,所以不要讓這個(gè)名詞困擾到了。在剛剛寫下的空列表中,添加一對圓括號 (),也就是一個(gè)元組,最基本的結(jié)構(gòu)已經(jīng)有了,現(xiàn)在我們來寫表達(dá)式。我們用來標(biāo)記一個(gè)待辦事項(xiàng)是否完成,用的是字段 is_done,如果它的值為 False 則表示這個(gè)待辦事項(xiàng)未完成,反之則表示已完成,根據(jù)這個(gè)規(guī)則,我們可以在元組中添加我們的表達(dá)式了,先寫下字段名 "is_done"(注意這里是字符串),然后寫下表達(dá)式的操作符 "="(這里也是一個(gè)字符串),最后寫下未完成對應(yīng)的值 False(這里是一個(gè)布爾值,非字符串)。
怎么樣,是不是很簡單呢,可能有同學(xué)要問了,為什么這里是用等于號 = 而不是 == 呢?這里就需要大家注意并且習(xí)慣了,不同于我們平時(shí)寫代碼判斷相等時(shí)會用 == 雙等號,在 domain 的表達(dá)式中判斷相等是使用的 = 單個(gè)等號,千萬記住啦!
其他的過濾器我們也能使用同樣的方式寫出來,大家再好好理解一下吧。我們再來看到上面出現(xiàn)的
心細(xì)的你一定發(fā)現(xiàn)了,是否完成的過濾器和緊急程度的過濾器被一條分割線分隔開了,從上面的代碼中我們可以看到這根分割線正是
試試看在搜索框中輸入內(nèi)容并搜索,然后加上過濾器組合看看效果吧,有沒有發(fā)現(xiàn)什么呢?再看看搜索視圖的代碼,在
使用字段搜索和過濾器,已經(jīng)可以滿足大部分?jǐn)?shù)據(jù)的搜索需求了,有時(shí)候我們除了需要按規(guī)則過濾出所需的數(shù)據(jù)外,還會需要對數(shù)據(jù)進(jìn)行分組查看,這種時(shí)候就可以用上分組(group by)功能了。
和過濾器一樣,分組功能我們同樣可以自己添加自定義的分組,但是要比過濾器簡單得多,只需要選擇一個(gè)字段然后應(yīng)用即可。
我們來看看在搜索視圖中如何定義分組項(xiàng):
...
我們添加了一個(gè)
另外我們再看到這里留空的 domain,大家可以嘗試在里面添加一些表達(dá)式,看看會有什么效果,這里我就不細(xì)說了,快升級模塊然后去頁面中刷新看看效果吧:
我們可以看到數(shù)據(jù)按照我們所選的分組項(xiàng)進(jìn)行了分組,并且默認(rèn)是折疊起來的,點(diǎn)擊展開之后我們可以看到對應(yīng)分組下的數(shù)據(jù),默認(rèn)折疊這個(gè)行為是由
大家可以試試看同時(shí)應(yīng)用多個(gè)分組,或者將分組和過濾器組合使用,仔細(xì)觀察和思考產(chǎn)生的結(jié)果。
瞎說幾句以上就是這次教程的內(nèi)容啦,SearchView 中還有一個(gè)收藏功能我們沒有講到,這個(gè)功能我們目前或者很長的一段時(shí)間內(nèi)都不會用到,所以也不打算在之后的教程中講解,如果感興趣的話可以自己嘗試著去使用,安裝一些官方的模塊,又或者看看源代碼,去學(xué)習(xí)相關(guān)的知識。
還是老規(guī)矩,教程中的代碼會更新在?GitHub?倉庫「Odoo-Tutorial-Demo」中。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42427.html
摘要:雖然這是個(gè)很簡單的應(yīng)用,但是希望大家可以動(dò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)太長了,我都覺得不好意思...
摘要:現(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 模型里的一些其他...
摘要:今天這個(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)容...
摘要:大家好鴨,我又來更新啦還記得我們在第二篇教程中提到過的動(dòng)作嗎,今天我們就來專門講講在中的,學(xué)習(xí)不同類型的動(dòng)作對應(yīng)的應(yīng)用場景,并且在我們的應(yīng)用中使用上其中一些類型的動(dòng)作。報(bào)表動(dòng)作這類型的動(dòng)作用于觸發(fā)報(bào)表打印,例如打印發(fā)票等。 showImg(https://segmentfault.com/img/bVbhdTE?w=1471&h=845); 大家好鴨,我又來更新啦!還記得我們在第二篇教...
摘要:在這一篇教程中,將會涉及到外鍵字段,可以將兩個(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); 在這一篇教程中,將會涉及到外鍵...
閱讀 2310·2023-04-25 14:22
閱讀 3748·2021-11-15 18:12
閱讀 1303·2019-08-30 15:44
閱讀 3224·2019-08-29 15:37
閱讀 653·2019-08-29 13:49
閱讀 3466·2019-08-26 12:11
閱讀 887·2019-08-23 18:28
閱讀 1592·2019-08-23 14:55