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

gsi*_*o83 1 odoo odoo-12

我有这个字段(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>
Run Code Online (Sandbox Code Playgroud)

我已经编辑了树和表单视图,因为我必须从模块的标准树/表单视图中隐藏一些字段。

我想要的是在普通窗口中打开没有弹出窗口的 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>
Run Code Online (Sandbox Code Playgroud)

在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
    }
Run Code Online (Sandbox Code Playgroud)

1 - 将函数放在 one2many 模型(“详细模型”)中是否正确?

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
Run Code Online (Sandbox Code Playgroud)

我错在哪里?

Ani*_*s B 5

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

<button string="View" 
                name="action_view_form_modelname" 
                type="object" 
                class="oe_highlight"/>  
Run Code Online (Sandbox Code Playgroud)

在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,
        }
Run Code Online (Sandbox Code Playgroud)

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

我将通过一个销售订单行树视图示例向您解释,您必须查看销售订单行表单视图而不弹出。您提供的 XML 代码是正确的。

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

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,
        }
Run Code Online (Sandbox Code Playgroud)

我来澄清你的疑惑:

  1. view = self.env.ref('module.form_view_name') ---- module 表示表单视图是在哪个模块中编写的,例如:在销售模块中,销售订单行表单视图已写入,因此您必须提供 sale.xml id您必须在没有弹出窗口的情况下看到的视图。如果你已经在你的新模块中编写了视图,那么给出模块名称并加上一个 '.' 然后提到表单viewid。销售订单视图是“view_order_form”。

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