Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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 我希望对修改后的对象只执行一次更新_Python_Openerp - Fatal编程技术网

Python 我希望对修改后的对象只执行一次更新

Python 我希望对修改后的对象只执行一次更新,python,openerp,Python,Openerp,我有这个方法,当我修改一条记录,然后所有记录都被更改时,我只想对修改的记录进行“更新”,而不想对所有其他记录进行“更新” @api.multi def _calculate_geom(self): for record in self: if record.cor != False: self.env.cr.execute('SELECT ST_Transform(ST_GeomFromText(\'MULT

我有这个方法,当我修改一条记录,然后所有记录都被更改时,我只想对修改的记录进行“更新”,而不想对所有其他记录进行“更新”

    @api.multi
    def _calculate_geom(self):
        for record in self:
            if record.cor != False:
                self.env.cr.execute('SELECT ST_Transform(ST_GeomFromText(\'MULTIPOLYGON((('+str(record.cor).encode('utf-8')+')))\',4326),900913)')
                record.cor2=record.env.cr.fetchone()[0]
                if record.cor2 != False:
                    self.env.cr.execute('UPDATE '+self._name.replace('.', '_')+' set the_geom=\''+record.cor2+'\'')

我没有误解您的问题,您只需要在update查询之后添加一个
break
语句,这样
for
循环将在第一次执行该查询后退出。

除非指定WHERE子句,否则更新将影响所有行。 要仅影响所需的行,您需要添加一个“WHERE id=%d”。 另外,您不应该使用连接来构建SQL,这有风险

比如:

sql = "UPDATE %s SET the_geom=%s WHERE id=%d"
self.env.cr.execute(sql, self._tablename, record.cor2, record.id)
除非我遗漏了什么,如果我是你,我会:

record.the_geom = record.cor2

这是一个Odoo,通过它,每次以这种方式创建或修改时所做的更改都不起作用。该函数何时运行?
cor2=fields.Char('Geom Translate',compute=''u calculate\u Geom')
Geom=geo\u字段。GeoMultiPolygon('NPA Shape')
那么每次输入所有对象的视图时,该函数都会运行,当你换一个的时候就不会了。也许函数字段不是您所需要的,您可以尝试重新定义write函数。