Reputation: 109
I've this field (one2many) in a form:
<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>
I've edited the tree and form view because I have to hide some field form the standard tree/form view of the module.
What I want is to open the form_view detail without pop-up in normal window.
I've read that this isn't possible, is it true?
Otherwise how can I add a button in the tree_view that calls the correct form_view of the record I've clicked and how to disable the pop-up opening?
Or how would you do that? What is the right way?
EDIT 1 :
After Anitha answer I've edited immobili_view.xml (master view) like this:
<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>
and in utilitypower_ee_utenze.py (details model) I've add the function:
@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 - is it correct to put the function here in the model of the one2many ("detail model")?
2 - view = self.env.ref('module.form_view_name')
I don't understand which module I have to put here, let me explain that I have "utilitypower.immobili" that is the module of the form_view where the tree with the button is, and "utilitypower.utenze_ee" is the module of the view of the detail. I think that is the destination module of the action, because we use it for view_id and view parameter (according https://www.odoo.com/documentation/12.0/reference/actions.html), is it correct?
3 - 'res_model': 'model for eg: hr.payslip',
here I know that I have to insert the model to present views for so in my case utilitypower.utenze_ee
If what I do is correct when I try to click on the button i have this error:
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
where am I wrong?
Upvotes: 1
Views: 3166
Reputation: 372
Please use the below button in the one2many tree view, after 'id_cig' field
<button string="View"
name="action_view_form_modelname"
type="object"
class="oe_highlight"/>
in the python file of one2many model write code:
@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,
}
On clicking the button from the tree view, will redirect to the specific form view of the record.
I will explain you with a sample of sale order line tree view for which you have to see the sale order line form view with out pop up. Xml code you have given is correct.
Python code you have to write in the python file sale.order.line. eg:
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,
}
Let me clarify your doubts:
view = self.env.ref('module.form_view_name') ---- module means in which module the form view has been written eg: in sale module sale order line form view is written so you have to give sale.xml id of the view you have to see with out popup. if you have written the view in your new module then give the module name and put a '.' and then mention the form viewid. for sale order form view is 'view_order_form'.
'res_model': 'model for eg: hr.payslip' --- In this section you have to provide the model name of which you want to see. Eg: sale order line you have to see after clicking the view button, then mention sale.order.line.
Upvotes: 5