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