日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

openerp child_of操作符深度解析

發(fā)布時(shí)間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 openerp child_of操作符深度解析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

child_of?

此操作符,從代碼來(lái)看,等價(jià)于:

[('x','child_of',id)] ==> ?x.prarent_left >=id.parent_left && x.parent_left <= id.parent_right , 求x(的集合)。 為了形象的說(shuō)明,我們一步步來(lái):

首先,模型定義里面必需要有parent_left / parent_right ,才支持在這個(gè)模型上執(zhí)行 child_of 操作(odoo硬編碼,不要問(wèn)我為什么),如下:

model

'parent_left': ....,

'parent_right':...,

)

定義了之后,必需有其他模型many2one到此模型,假設(shè)模型A m2o 到 model,這個(gè)字段叫做 model_id,那么可以在A上用 [('model_id','child_of',id)] 得到一個(gè)A的model_id是以上x的集合的A的對(duì)象集合。這么說(shuō)有些拗口,我們看看例子。

openerp中恰好有不少例子,producct.category 和 product.product就分別對(duì)應(yīng)上面的model和A。

product.product 有一個(gè)字段m2o到 product.category,這個(gè)字段叫做 categ_id,如下

?

在倉(cāng)庫(kù)/產(chǎn)品/產(chǎn)品類別 中,我們可以點(diǎn)擊一個(gè)類別,進(jìn)入對(duì)應(yīng)的產(chǎn)品列表,這就是一個(gè)child_of的實(shí)例, 其表達(dá)式是 [('categ_id','child_of',context['search_default_categ_id'])],如下:

?

這個(gè)表達(dá)式用在引用模型A上,此處是product.product。得到的結(jié)果就是一個(gè)product list, 其categ_id滿足表達(dá)式:

[('categ_id','child_of',id)] ==> ?categ_id.prarent_left >=id.parent_left && categ_id.parent_left <= id.parent_right , 求categ_id(的集合)。

得到[categ_id]后,再用 product.categ_id in [categ_id]進(jìn)行過(guò)濾。

?

parent_left / parent_righ

首先,這兩玩意是硬編碼支持child_of運(yùn)算的,沒(méi)啥好說(shuō),位于:openerp/osv/expression.py (703 ~ 724)

是通用父子關(guān)系的一種硬編碼。工作原理:采用數(shù)軸包含關(guān)系來(lái)區(qū)分父子。如下圖:

?

添加子節(jié)點(diǎn)算法:

第一句,把鄰居的左腳統(tǒng)一右移?

第二句,把長(zhǎng)輩和鄰居的右腳統(tǒng)一右移?

最后,自己占沙發(fā)

刪除算法則相反。

?

以上,py代碼部分完。js代碼部分尚未解析。

?

后來(lái),無(wú)意中發(fā)現(xiàn),原來(lái)這個(gè)算法還是有些來(lái)頭的,名為MPTT(modified preordered tree traversal),可以參考下這里。http://www.sitepoint.com/hierarchical-data-database-2/

轉(zhuǎn)載于:https://www.cnblogs.com/Tommy-Yu/p/odoo_child_of.html

總結(jié)

以上是生活随笔為你收集整理的openerp child_of操作符深度解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。