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,
}
让我澄清你的疑惑:
view = self.env.ref('module.form_view_name') ---- module表示表单视图写在哪个模块中 eg:在sale模块sale order line form view是写的所以你必须给你必须看到的视图的 sale.xml id 没有弹出窗口。
如果您已经在新模块中编写了视图,那么请提供模块名称并放置一个“。”然后提到表单viewid。待售订单视图为 'view_order_form'.
'res_model': 'model for eg: hr.payslip' --- 在此部分中,您必须提供要查看的型号名称。例如:点击查看按钮后你必须看到销售订单行,然后提到sale.order.line。
我有这个字段 (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,
}
让我澄清你的疑惑:
view = self.env.ref('module.form_view_name') ---- module表示表单视图写在哪个模块中 eg:在sale模块sale order line form view是写的所以你必须给你必须看到的视图的 sale.xml id 没有弹出窗口。 如果您已经在新模块中编写了视图,那么请提供模块名称并放置一个“。”然后提到表单viewid。待售订单视图为 'view_order_form'.
'res_model': 'model for eg: hr.payslip' --- 在此部分中,您必须提供要查看的型号名称。例如:点击查看按钮后你必须看到销售订单行,然后提到sale.order.line。