摘要:在這一篇教程中,將會(huì)涉及到外鍵字段,可以將兩個(gè)模型關(guān)聯(lián)起來,然后很方便地獲取到對(duì)應(yīng)的數(shù)據(jù)。關(guān)聯(lián)字段這一小節(jié)里,我們會(huì)給待辦事項(xiàng)加上分類,并且這個(gè)分類可以讓用戶自己創(chuàng)建維護(hù)。今天這篇教程的內(nèi)容就先到這里了,教程中的代碼會(huì)更新在我的倉(cāng)庫(kù)中。
在這一篇教程中,將會(huì)涉及到外鍵字段,可以將兩個(gè)模型關(guān)聯(lián)起來,然后很方便地獲取到對(duì)應(yīng)的數(shù)據(jù)。
關(guān)聯(lián)字段這一小節(jié)里,我們會(huì)給待辦事項(xiàng)加上分類,并且這個(gè)分類可以讓用戶自己創(chuàng)建維護(hù)。我們需要先創(chuàng)建一個(gè)新的模型 TodoCategory,然后將它和待辦事項(xiàng)關(guān)聯(lián)起來:
# models.py class TodoCategory(models.Model): _name = "todo.category" _description = "分類" name = fields.Char(u"名稱") task_ids = fields.One2many("todo.task", "category_id", string=u"待辦事項(xiàng)") count = fields.Integer(u"任務(wù)數(shù)量", compute="_compute_task_count") @api.depends("task_ids") @api.multi def _compute_task_count(self): pass class TodoTask(models.Model): _name = "todo.task" _description = "待辦事項(xiàng)" # ... category_id = fields.Many2one("todo.category", string=u"分類")
在上面的代碼中,我們定義了一個(gè) todo.category 模型,包含三個(gè)字段,然后添加了一個(gè) category_id 到待辦事項(xiàng)模型中,我們重點(diǎn)來看看 category_id 和 task_ids 這兩個(gè)字段。
這兩個(gè)字段都是關(guān)聯(lián)字段,一個(gè)是 Many2one,另一個(gè)是 One2many,還有一種我們暫時(shí)不會(huì)講到的 Many2many 多對(duì)多的關(guān)聯(lián)字段。Many2one 有一個(gè)必填的屬性 comodel_name 表示要關(guān)聯(lián)的模型的 _name,這個(gè)字段的值可能是 0 個(gè)或 1 個(gè)所關(guān)聯(lián)對(duì)象的記錄集,我們可以通過這個(gè)字段直接獲取到所關(guān)聯(lián)的數(shù)據(jù)對(duì)象,而不需要自己去查找對(duì)應(yīng)的實(shí)例。另一個(gè)關(guān)聯(lián)字段 One2many 同樣有必填的屬性 comodel_name,同時(shí)還有一個(gè) inverse_name 屬性,表示的是與當(dāng)前模型所關(guān)聯(lián)的模型(comodel_name 所指的模型)的 Many2one 字段的字段名,在此例中即 category_id,通過 One2many 字段我們可以直接獲取到所有關(guān)聯(lián)了當(dāng)前記錄的數(shù)據(jù)集。在這個(gè)例子中,假設(shè)我們有一個(gè)分類是「工作」,也就是說我們可以通過工作這個(gè)分類的 task_ids 這個(gè)字段獲取到所有待辦事項(xiàng)中 category_id 所關(guān)聯(lián)的分類是「工作」的所有待辦事項(xiàng)。
回到我們的代碼中,我們看到分類模型中還有一個(gè)計(jì)算字段 count,我們希望可以看到在一個(gè)分類下有多少待辦事項(xiàng),所以需要用到上一篇教程中所講到的計(jì)算字段,這里就當(dāng)作是復(fù)習(xí),一起來完成這個(gè)字段的計(jì)算邏輯:
# models.py @api.depends("task_ids") @api.multi def _compute_task_count(self): for record in self: record.count = len(record.task_ids)
這里的邏輯也十分簡(jiǎn)單,我們只需要通過記錄集的實(shí)例對(duì)象 record 獲取到對(duì)應(yīng)的待辦事項(xiàng),然后用 len() 獲取 task_ids 的長(zhǎng)度即可。
好的,模型已經(jīng)有了,還差了點(diǎn)什么呢?沒錯(cuò),還少了菜單和視圖,這里我們直接給出代碼,如果還有不理解怎么創(chuàng)建菜單和視圖的小伙伴,記得翻看一下之前的教程內(nèi)容。
待辦事項(xiàng) todo.task form tree,form current 分類 todo.category form tree,form current
菜單這里我們多增加了一層,聰明的你們應(yīng)該能夠一眼看出來哪里不同了,如果還是沒找到,實(shí)際運(yùn)行之后再觀察一下菜單的結(jié)構(gòu)吧~
todo.category.view_tree todo.category tree
OK,來更新一下模塊,然后打開看看效果吧,再嘗試創(chuàng)建幾個(gè)分類,并且給待辦事項(xiàng)關(guān)聯(lián)上分類。
視圖一切看起來還不錯(cuò),但是有沒有覺得,創(chuàng)建待辦事項(xiàng)的表單視圖(Form View),以及分類的表單視圖,顯得有些凌亂了?雖然并不是不能用,但是,我們還是決定要改造一下!
我們先從分類的視圖開始,首先可以看到分類中主要的信息就兩個(gè)——分類的名稱和分類下的任務(wù)數(shù)量。待辦事項(xiàng)我們其實(shí)不需要從分類中直接去查看,所以我們大可不必把待辦事項(xiàng)的記錄顯示出來,那我們的目標(biāo)已經(jīng)很明確了,隱藏分類表單視圖中的待辦事項(xiàng)記錄,和 Tree View 一樣,我們把視圖先寫好:
todo.category.view_form todo.category form
怎么樣,看起來是不是舒服多了~再仔細(xì)一想,創(chuàng)建分類其實(shí)也只需要填一個(gè)名稱,能不能不需要跳轉(zhuǎn)到專門的表單視圖里去創(chuàng)建咧?那當(dāng)然是沒問題的啦,我們可以讓分類直接就在 Tree View 中創(chuàng)建而不需要專門到 Form View 中去:
todo.category.view_tree todo.category tree
其實(shí)很簡(jiǎn)單,我們只需要在分類的 Tree View 中的
待辦事項(xiàng)的表單視圖,我們只需要簡(jiǎn)單地排一下版就好啦,沒有復(fù)雜的處理:
todo.task.view_form todo.task form
視圖部分,就先到這里,這還只是很基礎(chǔ)的一小部分內(nèi)容,后面還會(huì)有更多關(guān)于視圖部分的特性,在我們用到的時(shí)候?qū)?huì)給大家講解。
今天這篇教程的內(nèi)容就先到這里了,教程中的代碼會(huì)更新在我的 GitHub 倉(cāng)庫(kù)中。
倉(cāng)庫(kù)地址:Odoo-Tutorial-Demo
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/42268.html
摘要:雖然這是個(gè)很簡(jiǎn)單的應(yīng)用,但是希望大家可以動(dòng)手一起操作,從最簡(jiǎn)單的開始上手學(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)太長(zhǎng)了,我都覺得不好意思...
摘要:今天這個(gè)系列教程即將迎來它的最后一篇內(nèi)容了,我們將要來學(xué)習(xí)中權(quán)限相關(guān)的內(nèi)容。在的權(quán)限管理體系中,同樣也有用戶組這一概念的存在,和其他框架如可以說大同小異。通常和權(quán)限相關(guān)的內(nèi)容,我們都會(huì)在模塊的目錄下進(jìn)行定義,記錄集規(guī)則的定義自然也不例外。 在今年的情人節(jié)(2018.02.14)那天,我寫了一篇博客說即將要開一個(gè)坑,也就是大家在看的這個(gè)系列的教程。今天這個(gè)系列教程即將迎來它的最后一篇內(nèi)容...
摘要:現(xiàn)在我們來給待辦事項(xiàng)增加一個(gè)緊急程度的字段,用來表示當(dāng)前任務(wù)的優(yōu)先級(jí)。此處我們還給這個(gè)字段添加了默認(rèn)值,表示當(dāng)一個(gè)待辦事項(xiàng)被創(chuàng)建后,如果沒有指定緊急程度,將默認(rèn)是待辦狀態(tài)。這篇教程中的代碼同樣會(huì)更新在我的倉(cāng)庫(kù)中。 showImg(https://segmentfault.com/img/bVbfv3E?w=1330&h=912); 在這篇教程里我們將會(huì)了解到 Odoo 模型里的一些其他...
摘要:大家好鴨,我又來更新啦還記得我們?cè)诘诙坛讨刑岬竭^的動(dòng)作嗎,今天我們就來專門講講在中的,學(xué)習(xí)不同類型的動(dòng)作對(duì)應(yīng)的應(yīng)用場(chǎ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); 大家好鴨,我又來更新啦!還記得我們?cè)诘诙?..
摘要:在前面教程中,我們使用了兩種類型的視圖和今天我們將學(xué)習(xí)使用另一種類型的視圖搜索視圖。大家可以試試看同時(shí)應(yīng)用多個(gè)分組,或者將分組和過濾器組合使用,仔細(xì)觀察和思考產(chǎn)生的結(jié)果。還是老規(guī)矩,教程中的代碼會(huì)更新在倉(cāng)庫(kù)中。 showImg(https://segmentfault.com/img/bVbgO85?w=1950&h=1300); 在前面教程中,我們使用了兩種類型的視圖——TreeVi...
閱讀 1958·2021-11-23 09:51
閱讀 1608·2021-11-19 09:40
閱讀 3271·2021-11-11 11:01
閱讀 1217·2021-09-27 13:34
閱讀 1912·2021-09-22 15:56
閱讀 2198·2019-08-30 15:52
閱讀 1132·2019-08-30 14:13
閱讀 3548·2019-08-30 14:10