您好我一直在使用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给我一些关于此的知识。谢谢 希望提出建议
答案 0 :(得分:4)
简单来说,browse
是对数据库表记录启用read
操作的方法。 browse
方法将记录作为对象获取,允许使用点表示法来浏览字段和关系。这使得OpenERP编程接近OOP。
OpenERP框架使用ORM和MVC设计模式编写在Python编程中。 ORM包装Object中的使用值,并允许各种方法中的CRUD操作方法,即URL。 read
方法是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...]
列表并返回浏览记录列表。
它最终会从数据库中读取,但它也会执行一些其他内容,而不是读取;
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
了。它可以正常工作。一个非常常见的模式如上所示:
for product_model.browse中的产品(cr,uid,ids,context = context): 用我的产品做点什么
这是100次中的99次,但要注意它将一次读取所有数据库记录并构建对象列表。如果你有一个庞大的ID列表,你将使用一大块内存。