繁体   English   中英

在python中使用self.browse进行openerp开发的目的是什么?

[英]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...]的列表并返回浏览记录的列表。

它最终确实会从数据库中读取数据,但它还会执行其他一些读取操作不会执行的操作;

  1. 高速缓存
  2. 延迟加载到任何深度( sale_order_line.sale_order.partner.email
  3. 处理虚拟字段,例如功能字段,关系字段(many2one,one2many),相关字段。

从最简单的意义上讲,将其视为select * from my_table where id = %s ,然后从结果中组合一个对象。

注意事项:

  1. 浏览记录始终具有ID-例如product.id
  2. 您无法将浏览记录传递给客户端。 它们会延迟加载并保留在数据库游标上,如果您尝试查看“关闭后使用的游标”消息。
  3. 他们不能很好地处理丢失的记录。 确保您正在浏览的记录存在。 通常,您不必担心,但是如果需要确定,请进行搜索。
  4. 浏览记录实现__eq__因此, if product_browse_record == other_product_browse_record可以正常if product_browse_record == other_product_browse_record ,则可以使用。
  5. 上面是一个非常常见的模式:

    对于product_model.browse(cr,uid,ids,context = context)中的产品:对我的产品做一些事情

这是100的99倍,但是要注意,它将一口气读取所有数据库记录并构造对象列表。 如果您有大量的ID,则将使用大量内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM