如何获取记录并显示它?

时间:2019-04-11 08:26:15

标签: odoo-11

我正在编写一个用于搜索记录的函数。

当我更改名称字段的文本时,我希望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',
            }

我希望该网址来自

enter image description here

2 个答案:

答案 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',
            }

结果如下。 enter image description here

我认为这种方法确实很危险。

还有什么主意吗?