成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

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

UCloud / 1023人閱讀

摘要:雖然這是個(gè)很簡(jiǎn)單的應(yīng)用,但是希望大家可以動(dòng)手一起操作,從最簡(jiǎn)單的開(kāi)始上手學(xué)習(xí)如何使用這個(gè)框架。則是在和之間,負(fù)責(zé)響應(yīng)用戶(hù)操作,從中獲取數(shù)據(jù)進(jìn)行處理并返回到中。

在第一篇教程發(fā)布之后差不多一個(gè)月的今天,終于完成了第二篇內(nèi)容,這個(gè)發(fā)布周期拖得實(shí)在是有點(diǎn)太長(zhǎng)了,我都覺(jué)得不好意思了?

從這一篇教程開(kāi)始,我們將以創(chuàng)建一個(gè) Todo 應(yīng)用為目標(biāo),將 Odoo 中的一些概念和內(nèi)容逐漸引入進(jìn)來(lái),然后利用這些知識(shí)去完善我們的 Todo 應(yīng)用。雖然這是個(gè)很簡(jiǎn)單的應(yīng)用,但是希望大家可以動(dòng)手一起操作,從最簡(jiǎn)單的開(kāi)始上手學(xué)習(xí)如何使用 Odoo 這個(gè)框架。

這篇教程將會(huì)帶領(lǐng)大家一起創(chuàng)建第一個(gè) Odoo 模塊,為模型增加菜單和修改視圖,對(duì)于剛接觸的小伙伴來(lái)說(shuō)可能會(huì)有些生澀,不理解也沒(méi)關(guān)系,慢慢接觸上手之后會(huì)顯得容易得多,同時(shí)也歡迎大家積極提問(wèn),我會(huì)竭盡所能去幫助愛(ài)學(xué)習(xí)的小伙伴的。

好了,下面就正式開(kāi)始,一起動(dòng)手完成這一次的內(nèi)容吧?

創(chuàng)建模塊

我們?cè)?Odoo 源碼所在目錄的同一層級(jí)里創(chuàng)建一個(gè)目錄 mkdir mymodules,這個(gè)目錄專(zhuān)門(mén)用于存放我們自己創(chuàng)建的模塊,和 Odoo 自帶的模塊區(qū)分開(kāi)來(lái),當(dāng)然你也可以用其他名字。然后用 odoo-bin 的腳手架功能創(chuàng)建一個(gè)空的 Odoo 模塊,里面包含了一個(gè)完整的項(xiàng)目所需的基本文件和項(xiàng)目結(jié)構(gòu):

./odoo/odoo-bin scaffold todo mymodules

進(jìn)去 mymodules/ 看看,是不是多了一個(gè)目錄 todo/?就是這么簡(jiǎn)單,我們的第一個(gè) Odoo 模塊就創(chuàng)建好了,接下來(lái)先對(duì)項(xiàng)目結(jié)構(gòu)進(jìn)行簡(jiǎn)單的說(shuō)明,了解一下各個(gè)目錄底下應(yīng)該放置些什么內(nèi)容。

結(jié)構(gòu)說(shuō)明

下面是我們剛創(chuàng)建的 todo 模塊的目錄結(jié)構(gòu),從上到下一一進(jìn)行說(shuō)明:

todo
├── __init__.py
├── __manifest__.py
├── controllers
│?? ├── __init__.py
│?? └── controllers.py
├── demo
│?? └── demo.xml
├── models
│?? ├── __init__.py
│?? └── models.py
├── security
│?? └── ir.model.access.csv
└── views
    ├── templates.xml
    └── views.xml

在 Python 中,每一個(gè)包(package)都包含一個(gè) __init__.py 文件,而一個(gè) Odoo 的模塊,同時(shí)也是一個(gè) Python 包,所以我們可以看到,生成的項(xiàng)目文件里已經(jīng)包含了 __init__.py 這個(gè)文件,如果打開(kāi)這個(gè)文件,你會(huì)看到里面引入了 controllersmodels 這兩個(gè)包,稍候我們會(huì)講到這兩個(gè),這里先放一放。那么對(duì)于這個(gè) __init__.py 文件,我們沒(méi)什么特殊需求,是可以不用去理會(huì)的,就讓它靜靜地躺在那里完成它的使命就好了。

文件 __manifest__.py 用于聲明一個(gè) Odoo 模塊以及指定它的元數(shù)據(jù)(metadata),文件里只包含了一個(gè)多帶帶的 Python 字典,里面默認(rèn)只列出了 9 項(xiàng)最基本的配置項(xiàng),包含了模塊(或應(yīng)用)名,模塊的簡(jiǎn)介和詳細(xì)介紹,作者和網(wǎng)站,模塊的所屬分類(lèi)、版本,還有就是這個(gè)模塊依賴(lài)于其他的哪些 Odoo 模塊,需要加載哪些數(shù)據(jù)文件以及演示數(shù)據(jù)。除了這里列出的配置項(xiàng)外,還有一些高級(jí)配置項(xiàng),我們這里暫時(shí)不需要理會(huì),后面用到之后將會(huì)進(jìn)行詳細(xì)的說(shuō)明。

接下來(lái)我們先講一下 demosecurity 這兩個(gè)目錄。前者是用于存放演示數(shù)據(jù)的,在 __manifest__.py 中就可以看到有引入該目錄下的 demo.xml 文件,在使用演示模式時(shí),初始化一些演示數(shù)據(jù)可以幫我們節(jié)省不少的時(shí)間;而后者通過(guò)名字就知道它的作用是跟安全相關(guān)的,目錄下只有一個(gè) ir.model.access.csv 文件,里面用于定義不同的角色組對(duì)應(yīng)于不同模型的相關(guān)權(quán)限,包括讀(read),寫(xiě)(write),創(chuàng)建(create)和刪除(unlink)權(quán)限,擁有相關(guān)權(quán)限則為 1,反之為 0。我們剛提到了角色組,但是沒(méi)有發(fā)現(xiàn)相關(guān)定義的位置,我們只要默認(rèn)角色組的定義和模型權(quán)限定義在同一目錄下就可以了,角色組的定義同樣也是使用的 .xml 文件,在后面我們會(huì)有專(zhuān)門(mén)的一篇文章對(duì)角色組和權(quán)限進(jìn)行講解說(shuō)明。

下面要講的是 Odoo 開(kāi)發(fā)中的核心部分 MVC(同時(shí)也是大部分 Web 應(yīng)用開(kāi)發(fā)所采用的經(jīng)典模式),MVC 分別代表的是 Model(模型)、View(視圖)和 Controller(控制器)。有關(guān) MVC 模式具體的概念和相關(guān)的知識(shí),這里就不作詳細(xì)講解了,希望不了解的同學(xué)可以去找找相關(guān)的內(nèi)容學(xué)習(xí)一下。這里簡(jiǎn)單說(shuō)一下它們各自的用途,在 Model 中,我們定義一切和數(shù)據(jù)相關(guān)的東西,例如對(duì)應(yīng)到數(shù)據(jù)庫(kù)表字段的模型字段、各種外鍵關(guān)系以及操作數(shù)據(jù)的邏輯方法等。View 則是負(fù)責(zé)數(shù)據(jù)展示的,我們通過(guò)編寫(xiě)視圖控制需要展示出來(lái)的數(shù)據(jù)以及以什么樣的形式展示數(shù)據(jù)等,并且可以在視圖上進(jìn)行交互。Controller 則是在 Model 和 View 之間,負(fù)責(zé)響應(yīng)用戶(hù)操作,從 Model 中獲取數(shù)據(jù)進(jìn)行處理并返回到 View 中。

以上就是對(duì)一個(gè) Odoo 模塊的目錄結(jié)構(gòu)的一些簡(jiǎn)單的說(shuō)明,另外還有一些目錄在初始創(chuàng)建的模塊里是沒(méi)有出現(xiàn)的,但是我們后面會(huì)用上,到時(shí)候自己手動(dòng)創(chuàng)建相應(yīng)的目錄即可。

模型

前面一節(jié)中我們說(shuō)到 Model 是用于定義和數(shù)據(jù)相關(guān)內(nèi)容的地方,現(xiàn)在就來(lái)創(chuàng)建第一個(gè)模型吧。

首先打開(kāi) models/models.py 將里面注釋掉的內(nèi)容刪掉,不要修改文件頂部引入的包,然后添加以下代碼:

class TodoTask(models.Model):
     _name = "todo.task"
     _description = "待辦事項(xiàng)"

     name = fields.Char("描述", required=True)
     is_done = fields.Boolean("已完成?")

看起來(lái)十分簡(jiǎn)單,第一個(gè)模型就這樣創(chuàng)建好了 :)

我們創(chuàng)建了一個(gè)叫做 TodoTask 的類(lèi),它繼承自基礎(chǔ)模型 models.Model,這也是我們使用 Odoo 開(kāi)發(fā)時(shí)最常用的一種用于持久化數(shù)據(jù)的基礎(chǔ)模型,除此之外還有 models.TransientModelmodels.AbstractModel 這兩種,在之后接觸到我們將會(huì)進(jìn)行講解,這里暫不涉獵。

先看一下這個(gè)模型里帶下劃線(xiàn)前綴的兩個(gè)屬性:

_name - 模型的名稱(chēng),在外鍵或者實(shí)例化模型對(duì)象時(shí)會(huì)用到,是模型的唯一標(biāo)識(shí)

_description - 模型的描述,描述模型的作用,一般情況下不會(huì)主動(dòng)使用到

除了上面列出的兩個(gè)特殊屬性外,還有一些其他屬性,例如更改默認(rèn)顯示名稱(chēng)時(shí)會(huì)用到 _rec_name,繼承現(xiàn)有模型時(shí)會(huì)用到 _inherit 等,這些特殊屬性都具有他們各自的用途,但是除了 _name 是定義一個(gè)新的模型時(shí)必須要有的屬性外,其他屬性都是可選的。

在 Odoo 的模型定義中,我們使用 fields 進(jìn)行字段的定義,在上面這個(gè)模型里,我們簡(jiǎn)單地定義了 nameis_done 兩個(gè)字段,它們的類(lèi)型分別是 CharBoolean,并且我們指定字段 name 是必填的(添加了 required=True)。如果小伙伴接觸過(guò) Django,可能就會(huì)說(shuō)了,Django 的 CharField 是必須指定最大長(zhǎng)度 max_length 的,Odoo 的不需要嗎?那最大長(zhǎng)度是多少呢?對(duì)于這個(gè)疑問(wèn),官方的文檔里有這樣一句說(shuō)明:

Basic string field, can be length-limited, usually displayed as a single-line string in clients.

也就是說(shuō) Odoo 的字段類(lèi)型 Char 是不限制長(zhǎng)度的,但是通常只是用于單行字符串,如果要存儲(chǔ)大量文本內(nèi)容,還是使用 Text 更合適一些。

不如我們先把模塊安裝好,看看會(huì)不會(huì)有什么事情發(fā)生,和上一篇教程一樣,我們先將 Odoo 服務(wù)跑起來(lái),記得先在 Odoo 的源碼目錄中激活我們的開(kāi)發(fā)環(huán)境:

pipenv shell

./odoo-bin --addons-path=addons,../mymodules --db-filter=^demo$ -d demo

需要注意一下的是 --addons-path 中除了有 addons 外,還加上了我們剛創(chuàng)建的模塊目錄 mymodules,這里使用的是相對(duì)路徑,不要搞錯(cuò)了哦 :)

接下來(lái)我們打開(kāi)瀏覽器訪(fǎng)問(wèn) localhost:8069 然后用超級(jí)管理員帳號(hào)登錄(不記得了?帳號(hào)密碼都是 admin),登錄后在應(yīng)用列表頁(yè)面,將搜索框的 Apps 標(biāo)簽去掉,搜索關(guān)鍵詞 todo 找到我們剛創(chuàng)建的模塊,點(diǎn)擊 Install 按鈕安裝模塊。好了,你很快就會(huì)發(fā)現(xiàn),頁(yè)面又倒回了應(yīng)用列表頁(yè)面,如果我們?cè)俅伟辞懊娴牟襟E搜索我們的模塊,你會(huì)發(fā)現(xiàn)沒(méi)有了安裝按鈕,現(xiàn)在顯示的是 Installed 已安裝,除了這個(gè)變化外仿佛一切都沒(méi)發(fā)生過(guò),這是為什么呢?

因?yàn)槲覀儧](méi)有入口,找不到可以打開(kāi)我們的 Todo 應(yīng)用的地方,接下來(lái)我們就一起創(chuàng)建第一個(gè)入口——菜單。

創(chuàng)建菜單

光有模型是當(dāng)然不夠的,就好象一幢大樓,鋼筋骨架都搭起來(lái)了,然后把墻給封死了,沒(méi)有門(mén)我們進(jìn)不去呀!

剛好像說(shuō)了個(gè)不怎么恰當(dāng)?shù)谋扔?,不如直接?dòng)手,創(chuàng)建一個(gè)菜單更實(shí)際。在模塊里的 views 目錄下創(chuàng)建一個(gè) menus.xml 文件,然后輸入以下內(nèi)容:



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

上面各部分內(nèi)容我都寫(xiě)上了備注,大家一看就應(yīng)該知道它們各自是干什么的了。在 Odoo 中定義一個(gè)菜單,使用的是 menuitem,然后我們需要為菜單指定屬性 idname,前者是這個(gè)菜單的唯一標(biāo)識(shí),而后者則是這個(gè)菜單所顯示的名字。

然后我們定義了一個(gè)菜單動(dòng)作,也就是點(diǎn)擊一個(gè)菜單時(shí)所要執(zhí)行的動(dòng)作,Odoo 中動(dòng)作的類(lèi)型分為幾個(gè)類(lèi)型,從 model 這個(gè)屬性可以看出來(lái)一個(gè)動(dòng)作是屬于什么類(lèi)型的,act_window 表示我們定義的這個(gè)動(dòng)作是和窗口有關(guān)的,例如打開(kāi)一個(gè)彈窗或者一個(gè)列表頁(yè)面,都可以通過(guò)窗口動(dòng)作實(shí)現(xiàn)。其他類(lèi)型的動(dòng)作我們先放一放,后面會(huì)有專(zhuān)門(mén)的一篇文章用于講述動(dòng)作相關(guān)的內(nèi)容,我們先簡(jiǎn)單地了解一下定義一個(gè)窗口動(dòng)作有哪些要素。

和定義菜單一樣,必不可少的會(huì)有 id 這一屬性,以后我們將默認(rèn)所有在 .xml 文件中定義的數(shù)據(jù),都需要帶有 id 屬性,畢竟這是我們能夠通過(guò)代碼找到它們的唯一標(biāo)識(shí)了。這里我們用了 record 標(biāo)簽,包裹了一系列的 field 來(lái)定義我們的動(dòng)作,除了可以定義動(dòng)作外,包括前面提到的菜單在內(nèi)的一切具有實(shí)際模型的對(duì)應(yīng)的數(shù)據(jù),我們都可以這樣定義,最大的區(qū)別就在于 model 這個(gè)屬性所指定的值,它對(duì)應(yīng)到我們定義的數(shù)據(jù)是來(lái)自哪個(gè)模型的,被包裹在里面的 field 則對(duì)應(yīng)到一個(gè)模型的各個(gè)字段。剛開(kāi)始可能不太明白,不過(guò)不要緊,后面會(huì)一直使用到,很快就能掌握的了。

最后我們定義了一個(gè)子菜單,可以看到和最開(kāi)始定義的菜單不一樣的是,我們這里多了 3 個(gè)屬性,分別是 action、parentsequence。其中 action 的值是我們定義的動(dòng)作的 id,表示點(diǎn)擊這個(gè)菜單,就執(zhí)行對(duì)應(yīng) id 的動(dòng)作,parent 指定的值是我們定義的第一個(gè)菜單的 id,表示當(dāng)前菜單是指定菜單的子菜單,sequence 用于指定當(dāng)前菜單的位置,如果我們?cè)谥鞑藛蜗掠卸鄠€(gè)子菜單,我們可以通過(guò)這個(gè)屬性去指定各個(gè)子菜單排列的先后順序。

關(guān)于菜單和動(dòng)作,暫時(shí)就先到這里,最后不要忘了把文件 menus.xml 放到 __manifest__.pydata 列表中,不然我們定義的內(nèi)容是不會(huì)被加載的哦:

# 現(xiàn)在應(yīng)該是這樣的
"data": [
    # "security/ir.model.access.csv",
    "views/views.xml",
    "views/templates.xml",
    "views/menus.xml",
],

好咧,菜單有了,也就有了入口,現(xiàn)在我們刷新頁(yè)面看看有沒(méi)有什么變化,好像還是一樣沒(méi)有什么不一樣?當(dāng)然了,因?yàn)槲覀冃薷牧四K里的文件內(nèi)容,這些變動(dòng)并沒(méi)有被加載,所以我們需要先升級(jí)模塊。一樣的步驟,先找到我們的 Todo 應(yīng)用模塊,然后點(diǎn)擊卡片進(jìn)入表單頁(yè)面,可以看到有個(gè) Upgrade 按鈕,我們點(diǎn)擊這個(gè)按鈕把模塊升級(jí)一下,然后你就會(huì)發(fā)現(xiàn),我們終于看到了期待已久的菜單和 Todo 應(yīng)用的列表頁(yè)面啦~

我們的 Todo 應(yīng)用已經(jīng)初具原型了,點(diǎn)擊 Create 按鈕,創(chuàng)建一些數(shù)據(jù)試試看吧 :)

還記得在創(chuàng)建模型的時(shí)候給字段 name 加上了一個(gè) required=True 的屬性嗎?在創(chuàng)建記錄的表單頁(yè)我們可以看到,這個(gè)字段是淡紫色背景的,這說(shuō)明這一項(xiàng)是必填的內(nèi)容,如果不填寫(xiě),點(diǎn)擊 Save 按鈕,就會(huì)發(fā)現(xiàn)標(biāo)簽顯示的「描述」變成了紅色,輸入框也被紅色邊框包裹起來(lái)了,并且可以看到在窗口右上角出現(xiàn)了一個(gè)警告提示。

在創(chuàng)建好一條待辦事項(xiàng)的記錄后,點(diǎn)擊 Save 保存,如果想要繼續(xù)創(chuàng)建,可以直接在表單頁(yè)上點(diǎn)擊 Create 繼續(xù)創(chuàng)建新的記錄,也可以返回列表頁(yè)查看全部的待辦事項(xiàng)記錄。如果完成了一個(gè)待辦事項(xiàng),我們點(diǎn)擊對(duì)應(yīng)的記錄,進(jìn)入到表單頁(yè)面,然后點(diǎn)擊 Edit 編輯按鈕,然后勾選「已完成?」表示我們已經(jīng)完成了這個(gè)任務(wù)。

想要?jiǎng)h除掉一些記錄該怎么辦?可以在列表頁(yè)先勾選需要?jiǎng)h除的記錄,然后點(diǎn)擊上面的 Action 菜單,可以看到 Delete 這個(gè)選項(xiàng),點(diǎn)擊后會(huì)詢(xún)問(wèn)是否要?jiǎng)h除,點(diǎn)擊 Ok 確認(rèn)就可以刪除啦~除了列表頁(yè)上可以刪除記錄,還能打開(kāi)一條待辦事項(xiàng)進(jìn)入表單頁(yè)面,然后打開(kāi) Action 菜單執(zhí)行刪除操作。

創(chuàng)建視圖

在創(chuàng)建菜單之后,我們直接就看到了相應(yīng)的列表和表單頁(yè)面,可是我們并沒(méi)有創(chuàng)建任何相關(guān)的內(nèi)容,這是 Odoo 自動(dòng)幫我們做了處理。如果一個(gè)模型沒(méi)有創(chuàng)建對(duì)應(yīng)的視圖(View),Odoo 就會(huì)根據(jù)默認(rèn)的規(guī)則進(jìn)行顯示。

可是默認(rèn)在列表頁(yè)只顯示了一個(gè) name 字段,我們想要知道一個(gè)事項(xiàng)是否完成了,并不能直接在列表頁(yè)上知道,需要一個(gè)個(gè)點(diǎn)擊進(jìn)去查看,如果有很多的記錄,這可就太蛋疼了!所以我們還是需要自己創(chuàng)建一個(gè)列表視圖,把是否已完成顯示在列表頁(yè)上。

打開(kāi) views/views.xml,把里面注釋掉的內(nèi)容都刪掉,然后添加以下內(nèi)容:


    
        
            todo.task.view_tree
            todo.task
            tree
            
                
                    
                    
                
            
        
    

創(chuàng)建視圖相關(guān)的內(nèi)容,我們需要指定屬性 model="ir.ui.view",然后還有兩個(gè)關(guān)鍵的地方是 type 的值,如果創(chuàng)建的是列表視圖,則填寫(xiě) tree,如果是表單視圖則是 form,除了這兩種視圖外還有其他類(lèi)型的視圖,我們暫時(shí)不會(huì)接觸到。然后是 arch 的值,里面的內(nèi)容決定了我們的視圖長(zhǎng)什么樣,列表視圖需要用 包裹起來(lái),表單視圖則是

,包裹的內(nèi)容具會(huì)有所不同,這里我們只需要在列表視圖中將要顯示的字段列舉出來(lái)即可。

完成這一切之后,升級(jí)一下模塊,然后看看效果如何。

可以看到列表里多了一列「已完成?」,這樣我們就可以一目了然,知道哪些事項(xiàng)是已經(jīng)完成了的,然后就可以直接勾選將他們刪除掉啦 XD

源碼下載

從這一篇教程開(kāi)始,我會(huì)把所有代碼提交到 Github 的倉(cāng)庫(kù)中,并且我會(huì)保留相應(yīng)的文件修改的 commits 以供追溯,大家可以通過(guò)查看 commits 看到各個(gè)文件的變動(dòng),如果發(fā)現(xiàn)什么問(wèn)題,也可以直接提 issue 尋求幫助?

倉(cāng)庫(kù)地址:Odoo-Tutorial-Demo

相關(guān)文章

「Odoo 基礎(chǔ)教程系列」第〇篇——開(kāi)天坑啦

「Odoo 基礎(chǔ)教程系列」第一篇——環(huán)境準(zhǔn)備

微信群

最后慣例,感興趣的小伙伴可以加入微信群一起交流,加好友時(shí)備注加群,接受后會(huì)拉進(jìn)群內(nèi)。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44688.html

相關(guān)文章

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

    摘要:大家好鴨,我又來(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è)诘诙?..

    Lionad-Morotar 評(píng)論0 收藏0
  • Odoo 基礎(chǔ)教程系列」第七篇—— Todo 應(yīng)用開(kāi)始(6)

    摘要:今天這個(gè)系列教程即將迎來(lái)它的最后一篇內(nèi)容了,我們將要來(lái)學(xué)習(xí)中權(quán)限相關(guān)的內(nèi)容。在的權(quán)限管理體系中,同樣也有用戶(hù)組這一概念的存在,和其他框架如可以說(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)容...

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

    摘要:現(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 模型里的一些其他...

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

    摘要:在這一篇教程中,將會(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)可以讓用戶(hù)自己創(chuàng)建維護(hù)。今天這篇教程的內(nèi)容就先到這里了,教程中的代碼會(huì)更新在我的倉(cāng)庫(kù)中。 showImg(https://segmentfault.com/img/bVbfzvt?w=1280&h=795); 在這一篇教程中,將會(huì)涉及到外鍵...

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

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

    xiyang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<