《Odoo10 Development Essentials》Chapter5(p106)中介绍了Odoo中分层关系的建立。 代码如下
在上面的代码中。
使用字段来关联上层记录。
使用这个属性来开启分层搜索功能.
使用和字段来进行记录所属层级,当时看书的时候对这些代码不是很理解,只是知道这样做能够提高层级关系数据模型查询数据记录的效率。
简单原理
查询分层结构记录时,一般的想到的方法是从根目录开始,对每个子目录进行递归查询.然后才能得出具体的分层结构。(如递归查询文件夹文件)
Odoo中为了提高层次结构(树状结构)查询效率,每一条层级数据记录添加跟字段. 假设A是B的上级对象。那么存在这样的逻辑关系。
画个图来理解下
可以看到,图中的B属于A的,清楚的表示了A,B的层级从属关系。
Odoo 应用
我们用Odoo11的product模块作为演示 在文件中.看到产品目录(ProductCategory类.15行起)的代码
在Odoo11的演示数据中,产品的目录结构一共有6个
我们查询下数据库中的数据,获取每个产品目录各自的数值
注:这里可以发现,上层目录
添加数值
通过上面的展示,可以清楚的看到所有产品目录各自的包含结构。根目录为All,然后依次为Internal,Saleable. Saleable下面又有3个子目录…
假设要找到All产品目录下的所有产品目录
只需要一条查询语句即可找到所有子目录.无须遍历. 要找Saleable下的所有子目录即可使用 作为条件
结论:
在Odoo的实际使用中,发现使用parent存储特性的模块主要涉及account, product, stock_location. 因为这个优化对查询层级结构效率有良好效果。 凡事皆有两面,这种存储特性会在数据库中添加多余的字段。其实是以空间换时间。
参考
https://stackoverflow.com/questions/11861436/parent-left-and-parent-right-in-openerp
领取专属 10元无门槛券
私享最新 技术干货