我正在写一个搜索记录的功能。
当我更改名称字段的文本时,我希望odoo会回复记录并发布它。
我已经提到了odoo原始代码,但它没有用。
@api.multi
@api.onchange('name')
def _search_name(self):
if self._context.get('params')['action'] == 111:
return {
'res_id': self.env['yc.purchase'].search([('name', '=', self.name)]).id,
'view_type': 'form',
'view_mode': 'form',
'res_model': 'yc.purchase',
'view_id': False,
'type': 'ir.actions.act_window',
}
我希望网址来自
您无法在onchange方法中更改模型,无论是单击按钮还是执行操作。您可以在onchange中返回警告。
我用一种愚蠢而危险的方式来实现这个想法。
该过程是您想要搜索的名称的类型。单击按钮时,db立即创建一个除名称字段外不包含任何内容的新记录。输入功能后,我将其删除。这样它就不会引起错误。
我的view.xml
<record model="ir.ui.view" id="process_data_entry_form">
<field name="name">pde.form</field>
<field name="model">yc.purchase</field>
<field name="arch" type="xml">
<form string="ProcessDataEntry form">
<sheet>
<group col="8">
</group>
<div>
<button string="search name" type="object" name="yc_purchase_search_name"/>
</div>
我的mudule.py
@api.multi
# @api.onchange("name")
def yc_purchase_search_name(self,):
# if url action = 111 execute function
if self._context.get('params')['action'] == 111:
# delete the empty record just create by odoo
to_delete_id = self.env["yc.purchase"].search([('name', '=', self.name)],order='id desc',limit=1).id
sql = "delete from yc_purchase where id=%d" % to_delete_id
self._cr.execute(sql)
id = self.env['yc.purchase'].search([('name', '=', self.name)]).id
return {
'res_model': 'yc.purchase',
'type': 'ir.actions.act_window',
'res_id': id,
'view_type': 'form',
'view_mode': 'form',
'view_id': self.env.ref('yc_root.process_data_entry_form').id,
'target': 'inline',
}
我认为这种方法非常危险。
任何更大的想法?