![](/img/trans.png)
[英]What's the difference between self.browse() and self.pool.get() in OpenERP development?
[英]what is the purpose of using self.browse in python for openerp development?
嗨,我一直在使用Python开发OpenERP模块。 我一直在查看源代码,并在理解它时遇到问题。 我不明白以下两行,其中self.browse以id,uid作为参数,然后使用具有功能的工具
for obj in self.browse(cr, uid, ids, context=context):
result[obj.id] = tools.image_get_resized_images(obj.image)
请给我一些有关此方面的知识。 感谢希望的建议
用简单的话来说, browse
是一种启用对数据库表记录的read
操作的方法。 browse
方法将记录取为对象,允许使用点符号浏览字段和关系。 这使OpenERP编程接近OOP。
OpenERP框架是使用ORM和MVC设计模式编写的Python编程。 ORM将使用值包装在Object中,并允许使用各种方法(例如URL)进行CRUD操作方法。 read
方法是browse
方法的替代方法,其中读取返回dict的python列表,而浏览返回每个对象在数据库中记录的对象的列表。
因此,对您的代码的分析是: for obj in self.browse(cr, uid, ids, context=context):
语句for obj in self.browse(cr, uid, ids, context=context):
可以for obj in self.browse(cr, uid, ids, context=context):
行。 1. self.browse(cr,uid,ids,context = context)从self(object)获取记录(ids)。 2.循环遍历上面的返回。 因此,每次循环迭代时,它都会将记录存储在obj
,该记录基本上是db记录,并且由于它是记录和对象,因此将Tablet列值包装为side属性,因此您可以使用obj.field_name来获取字段值
希望这会有所帮助。
就像在Firebug的答案中一样,您可以将浏览看作是SQL select语句的简单或简单的阅读,但有一些区别。 从技术上讲,它们代表由ORM模型定义的数据的实例-product.product定义模型(或表),浏览记录是表中数据的一行。
浏览采用单个ID(例如1)并返回浏览记录,或者采用Ids [1,2,3...]
的列表并返回浏览记录的列表。
它最终确实会从数据库中读取数据,但它还会执行其他一些读取操作不会执行的操作;
sale_order_line.sale_order.partner.email
) 从最简单的意义上讲,将其视为select * from my_table where id = %s
,然后从结果中组合一个对象。
注意事项:
product.id
__eq__
因此, if product_browse_record == other_product_browse_record
可以正常if product_browse_record == other_product_browse_record
,则可以使用。 上面是一个非常常见的模式:
对于product_model.browse(cr,uid,ids,context = context)中的产品:对我的产品做一些事情
这是100的99倍,但是要注意,它将一口气读取所有数据库记录并构造对象列表。 如果您有大量的ID,则将使用大量内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.