Odoo12:如何在没有弹出窗口的情况下从 tree_view 显示 form_view?

Odoo12 : How to show form_view from a tree_view without pop-up?

我有这个字段 (one2many) 的形式:

   <field name="utenzeEE_ids" context="{'default_id_immobile':active_id}"> 
   <tree> 
        <field name="pod"/> 
        <field name="matricola"/> 
        <field name="tipo"/> 
        <field name="indirizzo"/> 
        <field name="sub"/> 
        <field name="dal"/> 
        <field name="al"/> 
        <field name="id_cig" widget="selection"/> 
    </tree>
    <form> 
        <header></header> 
        <sheet> 
            <group> 
                <field name="pod"/> 
                <field name="matricola"/> 
                <field name="tipo"/> 
                <field name="indirizzo"/> 
                <field name="sub"/> 
                <field name="dal"/> 
                <field name="al"/> 
                <field name="id_cig" widget="many2one_list"/> 
                <field name="id_misuratore" widget="many2one_list"/> 
                <field name="id_immobile" widget="many2one_list"/> 
                <field name="attivitasvolte_ids" widget="one2many_list"/> 
            </group> 
        </sheet> 
    </form>
    </field>

我编辑了树和表单视图,因为我必须隐藏一些字段形成模块的标准 tree/form 视图。

我想要的是在正常 window 中打开 form_view 详细信息而不弹出窗口。

我听说这是不可能的,是真的吗?

否则我如何在 tree_view 中添加一个按钮来调用我单击的记录的正确 form_view 以及如何禁用弹出窗口打开?

或者你会怎么做?正确的方法是什么?

编辑 1:

Anitha 回答后,我编辑了 immobili_view.xml(主视图),如下所示:

 <field name="utenzeEE_ids" context="{'default_id_immobile':active_id}">
                            <tree editable="top">
                                <field name="pod"/>
                                <field name="matricola"/>
                                <field name="tipo"/>
                                <field name="indirizzo"/>
                                <field name="sub"/>
                                <field name="dal"/>
                                <field name="al"/>
                                <field name="id_cig" widget="selection"/>
                                <button string="view" name="action_view_form_modelname" type="object"  alt="Dettaglio" class="btn btn-small btn-primary" />
                            </tree>                       
                           <form>
                                <header></header>
                                <sheet>
                                   <group>
                                        <field name="pod"/>
                                        <field name="matricola"/>
                                        <field name="tipo"/>
                                        <field name="indirizzo"/>
                                        <field name="sub"/>
                                        <field name="dal"/>
                                        <field name="al"/>                        
                                        <field name="id_cig" widget="many2one_list"/>
                                        <field name="id_misuratore" widget="many2one_list"/>
                                        <field name="id_immobile" widget="many2one_list"/> 
                                        <field name="attivitasvolte_ids" widget="one2many_list"/>
                                    </group>
                                </sheet>
                            </form> 
                        </field>

在utilitypower_ee_utenze.py(细节模型)中我添加了函数:

@api.multi
def action_view_form_modelname(self):
    view = self.env.ref('utilitypower.utenze_ee')
    return {
       'type' : 'ir.actions.act_window',
       'view_type' : 'form',
       'view_mode' : 'form',
       'res_model' : 'utilitypower.utenze_ee',
       'views': [(view.id,'form')],
       'view_id': view.id,
       'res_id': self.id,
       'context': self.env.context
    }

1 - 将函数放在 one2many ("detail model") 的模型中是否正确?

2 - view = self.env.ref('module.form_view_name') 我不明白我要把哪个模块放在这里,让我解释一下我 "utilitypower.immobili" 那是 form_view 的模块带有按钮的树是,"utilitypower.utenze_ee" 是细节视图的模块。我认为这是操作的目标模块,因为我们将它用于 view_id 和视图参数(根据https://www.odoo.com/documentation/12.0/reference/actions.html),是否正确?

3 - 'res_model': 'model for eg: hr.payslip', 在这里我知道我必须插入模型来呈现视图所以在我的例子中 utilitypower.utenze_ee

如果我在尝试单击按钮时所做的是正确的,我会遇到此错误:

Odoo Server Error
Traceback (most recent call last):
  File "/opt/odoo/odoo12/odoo/tools/cache.py", line 88, in lookup
    r = d[key]
  File "/opt/odoo/odoo12/odoo/tools/func.py", line 69, in wrapper
    return func(self, *args, **kwargs)
  File "/opt/odoo/odoo12/odoo/tools/lru.py", line 44, in __getitem__
    a = self.d[obj].me
KeyError: ('ir.model.data', <function IrModelData.xmlid_lookup at 0x7fe3b62f5400>, 'utilitypower.immobili')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/odoo/odoo12/odoo/http.py", line 654, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/opt/odoo/odoo12/odoo/http.py", line 312, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "/opt/odoo/odoo12/odoo/tools/pycompat.py", line 87, in reraise
    raise value
  File "/opt/odoo/odoo12/odoo/http.py", line 696, in dispatch
    result = self._call_function(**self.params)
  File "/opt/odoo/odoo12/odoo/http.py", line 344, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/opt/odoo/odoo12/odoo/service/model.py", line 97, in wrapper
    return f(dbname, *args, **kwargs)
  File "/opt/odoo/odoo12/odoo/http.py", line 337, in checked_call
    result = self.endpoint(*a, **kw)
  File "/opt/odoo/odoo12/odoo/http.py", line 939, in __call__
    return self.method(*args, **kw)
  File "/opt/odoo/odoo12/odoo/http.py", line 517, in response_wrap
    response = f(*args, **kw)
  File "/opt/odoo/odoo12/addons/web/controllers/main.py", line 966, in call_button
    action = self._call_kw(model, method, args, {})
  File "/opt/odoo/odoo12/addons/web/controllers/main.py", line 954, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/opt/odoo/odoo12/odoo/api.py", line 749, in call_kw
    return _call_kw_multi(method, model, args, kwargs)
  File "/opt/odoo/odoo12/odoo/api.py", line 736, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "/opt/odoo/odoo12-custom-addons/utility_power/models/utilitypower_ee_utenze.py", line 23, in action_view_form_modelname
    view = self.env.ref('utilitypower.utenze_ee')
  File "/opt/odoo/odoo12/odoo/api.py", line 854, in ref
    return self['ir.model.data'].xmlid_to_object(xml_id, raise_if_not_found=raise_if_not_found)
  File "/opt/odoo/odoo12/odoo/addons/base/models/ir_model.py", line 1396, in xmlid_to_object
    t = self.xmlid_to_res_model_res_id(xmlid, raise_if_not_found)
  File "/opt/odoo/odoo12/odoo/addons/base/models/ir_model.py", line 1380, in xmlid_to_res_model_res_id
    return self.xmlid_lookup(xmlid)[1:3]
  File "<decorator-gen-25>", line 2, in xmlid_lookup
  File "/opt/odoo/odoo12/odoo/tools/cache.py", line 93, in lookup
    value = d[key] = self.method(*args, **kwargs)
  File "/opt/odoo/odoo12/odoo/addons/base/models/ir_model.py", line 1369, in xmlid_lookup
    raise ValueError('External ID not found in the system: %s' % xmlid)
ValueError: External ID not found in the system: utilitypower.immobili

我哪里错了?

请在 one2many 树视图中使用下面的按钮,在 'id_cig' 字段后

<button string="View" 
                name="action_view_form_modelname" 
                type="object" 
                class="oe_highlight"/>  

在one2many模型的python文件中写入代码:

@api.multi
def action_view_form_modelname(self):
    view = self.env.ref('module.form_view_name')
    return {
        'type': 'ir.actions.act_window',
        'view_type': 'form',
        'view_mode': 'form',
        'res_model': 'model for eg: hr.payslip',
        'views': [(view.id, 'form')],
        'view_id': view.id,
        'res_id': self.id,
        'context': self.env.context,
        }

在树视图中单击按钮,将重定向到记录的特定表单视图。

我将用一个销售订单行树视图示例向您解释,您必须在没有弹出窗口的情况下查看销售订单行表单视图。 Xml 您提供的代码是正确的。

Python 您必须在 python 文件中编写的代码 sale.order.line。例如:

class HrPayslip(models.Model):
    _inherit = 'sale.order.line'

    @api.multi
    def action_view_form_modelname(self):
        view = self.env.ref('sale.form_view_xml_id')
        return {
            'type': 'ir.actions.act_window',
            'view_type': 'form',
            'view_mode': 'form',
            'res_model': 'sale.order.line',
            'views': [(view.id, 'form')],
            'view_id': view.id,
            'res_id': self.id,
            'context': self.env.context,
        }

让我澄清你的疑惑:

  1. view = self.env.ref('module.form_view_name') ---- module表示表单视图写在哪个模块中 eg:在sale模块sale order line form view是写的所以你必须给你必须看到的视图的 sale.xml id 没有弹出窗口。 如果您已经在新模块中编写了视图,那么请提供模块名称并放置一个“。”然后提到表单viewid。待售订单视图为 'view_order_form'.

  2. 'res_model': 'model for eg: hr.payslip' --- 在此部分中,您必须提供要查看的型号名称。例如:点击查看按钮后你必须看到销售订单行,然后提到sale.order.line。