我正在编写一个用于搜索记录的函数。
当我更改名称字段的文本时,我希望oodo会把记录退回并发布。
我已经引用了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',
}
我希望该网址来自
答案 0 :(得分:0)
您无法通过onchange方法更改模型,因为它无法单击按钮或执行操作。您可以在onchange中返回警告。
答案 1 :(得分:0)
我用愚蠢而危险的方式来实现这个想法。
该过程是键入您要搜索的名称。 单击按钮时,db立即创建一个新记录,其中除了name字段外什么都不含。 在输入功能后,我将其删除。 这样就不会引发错误。
我的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',
}
我认为这种方法确实很危险。
还有什么主意吗?