Как получить запись и отобразить ее? - PullRequest
1 голос
/ 11 апреля 2019

Я пишу функцию для поиска записи.

пока я меняю текст полей имени, я надеюсь, что 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',
            }

Я надеюсь, что URL будет от

enter image description here

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Я использую глупый и опасный способ достичь идеи.

В процессе введите имя, которое вы хотите найти. При нажатии на кнопку, дб сразу создает новую запись, не содержащую ничего, кроме поля имени. И после ввода функции я ее удаляю. Чтобы это не вызывало ошибку.

my 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>

my 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

Я думаю, что этот метод действительно опасен.

есть идеи?

0 голосов
/ 11 апреля 2019

Вы не можете изменить модель в методе onchange, для этого либо нажмите на кнопку, либо выполните действие.Вы можете вернуть предупреждение в onchange.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...