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

时间:2013-10-07 13:17:21

标签: python eclipse openerp

您好我一直在使用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)

Plz给我一些关于此的知识。谢谢 希望提出建议

2 个答案:

答案 0 :(得分:4)

简单来说,browse是对数据库表记录启用read操作的方法。 browse方法将记录作为对象获取,允许使用点表示法来浏览字段和关系。这使得OpenERP编程接近OOP。

OpenERP框架使用ORM和MVC设计模式编写在Python编程中。 ORM包装Object中的使用值,并允许各种方法中的CRUD操作方法,即URLread方法是browse方法的替代方法,其中read返回dict的python列表,browse返回每个对象在数据库中记录的对象列表。

因此,您的代码分析如下: 这句话for obj in self.browse(cr, uid, ids, context=context):可以分为几行。 1. self.browse(cr,uid,ids,context = context)从self(object)获取记录(id)。 2.因为这是循环上面的回报。因此,每次循环它都会将记录存储在obj中,这基本上是数据库记录,因为它是记录和对象,它将平板电脑列值作为属性包装在一边,因此您可以使用obj.field_name <获取字段值/ p>

希望这会有所帮助。

答案 1 :(得分:1)

正如在Firebug的回答中一样,您可以将浏览视为一个读取或简单的术语,一个SQL选择语句,但有一些差异。从技术上讲,它们代表ORM模型定义的数据实例 - product.product定义模型(或表),浏览记录是表中的一行数据。

浏览采用单个ID(例如1)并返回浏览记录或获取ID [1,2,3...]列表并返回浏览记录列表。

它最终会从数据库中读取,但它也会执行一些其他内容,而不是读取;

  1. 缓存
  2. 延迟加载到任何深度(sale_order_line.sale_order.partner.email
  3. 处理虚拟字段,例如功能字段,关系字段(many2one,one2many),相关字段。
  4. 从最简单的意义上讲,将其视为select * from my_table where id = %s,然后从结果中组合一个对象。

    有几点需要注意:

    1. 浏览记录总是有ID - 例如product.id
    2. 您无法将浏览记录传递给客户端。他们懒洋洋地加载并保持数据库游标,如果您尝试看到“关闭后使用的游标”消息。
    3. 他们不能很好地处理浏览缺失的记录。确保您正在浏览的记录存在。通常这不是你必须担心的事情,但如果你需要确定,请进行搜索。
    4. 浏览记录实施__eq__,这样您就可以if product_browse_record == other_product_browse_record了。它可以正常工作。
    5. 一个非常常见的模式如上所示:

      for product_model.browse中的产品(cr,uid,ids,context = context):    用我的产品做点什么

    6. 这是100次中的99次,但要注意它将一次读取所有数据库记录并构建对象列表。如果你有一个庞大的ID列表,你将使用一大块内存。