我有这个字段(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)
我错在哪里?
请在 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)
我来澄清你的疑惑:
view = self.env.ref('module.form_view_name') ---- module 表示表单视图是在哪个模块中编写的,例如:在销售模块中,销售订单行表单视图已写入,因此您必须提供 sale.xml id您必须在没有弹出窗口的情况下看到的视图。如果你已经在你的新模块中编写了视图,那么给出模块名称并加上一个 '.' 然后提到表单viewid。销售订单视图是“view_order_form”。
'res_model': 'model for eg: hr.payslip' --- 在本节中,您必须提供要查看的模型名称。例如:您必须在单击查看按钮后看到销售订单行,然后提及 sale.order.line。