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