如何从on_change方法获取id作为整数?

时间:2015-11-05 14:49:27

标签: python python-2.7 odoo-8 odoo

我想用sql查询选择不同的值,因为我需要id作为整数。

我的代码是:

@api.onchange('qty')
def _on_change_name(self):
    logging.warning(self.id)

打印的ID为<openerp.models.NewId object at 0x7fc37d880490>

如何从此id获取整数?

2 个答案:

答案 0 :(得分:4)

在具有计算字段的模型中或在onchange方法中创建新记录时,记录集的记录将仅在内存中。那时记录的id将是openerp.models.NewId

类型的虚拟ID

因此,如果您需要在代码中使用记录ID(例如,对于SQL查询),您应该检查它是否可用:

if isinstance(current_record.id, models.NewId):
    # do your stuff

<强>更新即可。 Zoellner有更好的答案here

  

查看onchange() line 4971 and following。   Odoo正在创建一个缓存/内存的新记录,之后会再创建   onchange完成后,用提供的数据更新自己的缓存。

     

如果您确实需要使用ID或其他字段   <record>._origin.<field>

     

注意:不要在onchange方法上使用api.one装饰器。他们是   无论如何都触发了单身人士的记录。

答案 1 :(得分:1)

要获得last id我已经执行了一个sql查询来在创建时选择最新create_date的id,然后我将其存储起来。

self._cr.execute("SELECT id FROM table ORDER BY create_date DESC LIMIT 1")
id = self._cr.fetchone()[0]