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函数。