Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用self.browse进行openerp开发的目的是什么?_Python_Eclipse_Openerp - Fatal编程技术网

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

在python中使用self.browse进行openerp开发的目的是什么?,python,eclipse,openerp,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) 请告诉我一些关于这个的知识。谢谢 希望得到建议简单地说

嗨,我一直在使用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
方法将记录提取为对象,允许使用点符号浏览字段和关系。这使得OpenERP编程接近OOPs

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

因此,对代码的分析是: self.browse(cr、uid、ids、context=context)中obj的此语句
可以分为几行。 1.浏览(cr,uid,ids,context=context)从self(对象)获取记录(ID)。 2.因为这是通过上面的返回的循环。因此,每次循环iter时,它都会将记录存储在
obj
中,这基本上是db记录,因为它是记录和对象,所以它会将tablet列值作为属性包装在侧边,因此您可以使用obj.field\u name获取字段值


希望这会有所帮助。

正如Firebug的回答一样,您可以将浏览视为一个read语句,或者简单地说,是一个SQL select语句,但有一些区别。从技术上讲,它们表示由ORM模型定义的数据实例-product.product定义模型(或表),浏览记录是表中的一行数据

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

它最终会从数据库中读取数据,但它也会做一些其他读取所不做的事情

  • 缓存
  • 延迟加载到任意深度(
    sale\u order\u line.sale\u order.partner.email
  • 处理虚拟字段,如功能字段、关系字段(many21、one2many)、相关字段
  • 在最简单的意义上,可以将其视为从my_表中选择*,其中id=%s,然后根据结果组合一个对象

    需要注意的几点:

  • 浏览记录总是有一个ID,例如
    product.ID
  • 无法将浏览记录传递给客户端。如果您尝试查看“关闭后使用的游标”消息,它们会延迟加载并保留数据库游标
  • 他们不能很好地处理浏览丢失的记录。确保您正在浏览的记录存在。通常情况下,这不是你必须担心的事情,但是如果你需要确定的话,做一个搜索
  • 浏览记录实现了
    \uuuuueq\uuuuuu
    ,因此,如果产品浏览记录==其他产品浏览记录,则可以转到
  • 一个非常常见的模式如下所示:

    对于product_model.browse(cr、uid、ids、context=context)中的产品: 对我的产品做些什么


  • 100次中有99次这样做很好,但请注意,它将一次性读取所有数据库记录,并构建一个对象列表。如果您有一个庞大的id列表,您将使用一大块内存。

    表示该id是字段名还是什么。我对术语“id”@ArsalanSherwani非常困惑:yesid是表主键,也称为记录id,您在Ids param中接收到它。在OpenERP中,每个记录都有唯一的Id(PK),我们称之为Id,所以唯一标识任何reocrd的方法是记录Id。那么工具呢?它是一个内置函数还是什么?它是OpenERP提供的python包。在代码中输入“from openerp import tools”,您就可以了。请注意,tools是一个包,但它的init在中导入映像函数,以便您可以直接使用它们。我不喜欢这种风格,但事实就是这样。那么“图像大小调整图像”呢?它是工具包中的内置函数吗?不,不是内置函数。它是内存中工具包中image.py模块内的常规函数。