This question has been flagged
4 Replies
6680 Views

I am trying to inherit a base users form (base.view_users_simple_form), that pops up after clicking on an user from a widget wihin a custom module. What I want is to add two more editable input fields (these fields already exist on the database) to it, since default form only comes with three: phone, mobile and fax: This is the traceback thrown when restarting server:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 177, in run_wsgi
    execute(self.server.app)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 165, in execute
    application_iter = app(environ, start_response)
  File "/opt/odoo/sources/odoo/openerp/service/server.py", line 291, in app
    return self.app(e, s)
  File "/opt/odoo/sources/odoo/openerp/service/wsgi_server.py", line 216, in application
    return application_unproxied(environ, start_response)
  File "/opt/odoo/sources/odoo/openerp/service/wsgi_server.py", line 202, in application_unproxied
    result = handler(environ, start_response)
  File "/opt/odoo/sources/odoo/openerp/http.py", line 1292, in __call__
    return self.dispatch(environ, start_response)
  File "/opt/odoo/sources/odoo/openerp/http.py", line 1266, in __call__
    return self.app(environ, start_wrapped)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/wsgi.py", line 588, in __call__
    return self.app(environ, start_response)
  File "/opt/odoo/sources/odoo/openerp/http.py", line 1430, in dispatch
    ir_http = request.registry['ir.http']
  File "/opt/odoo/sources/odoo/openerp/http.py", line 348, in registry
    return openerp.modules.registry.RegistryManager.get(self.db) if self.db else None
  File "/opt/odoo/sources/odoo/openerp/modules/registry.py", line 339, in get
    update_module)
  File "/opt/odoo/sources/odoo/openerp/modules/registry.py", line 370, in new
    openerp.modules.load_modules(registry._db, force_demo, status, update_module)
  File "/opt/odoo/sources/odoo/openerp/modules/loading.py", line 350, in load_modules
    force, status, report, loaded_modules, update_module)
  File "/opt/odoo/sources/odoo/openerp/modules/loading.py", line 255, in load_marked_modules
    loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
  File "/opt/odoo/sources/odoo/openerp/modules/loading.py", line 176, in load_module_graph
    _load_data(cr, module_name, idref, mode, kind='data')
  File "/opt/odoo/sources/odoo/openerp/modules/loading.py", line 118, in _load_data
    tools.convert_file(cr, module_name, filename, idref, mode, noupdate, kind, report)
  File "/opt/odoo/sources/odoo/openerp/tools/convert.py", line 900, in convert_file
    convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
  File "/opt/odoo/sources/odoo/openerp/tools/convert.py", line 986, in convert_xml_import
    obj.parse(doc.getroot(), mode=mode)
  File "/opt/odoo/sources/odoo/openerp/tools/convert.py", line 852, in parse
    self._tags[rec.tag](self.cr, rec, n, mode=mode)
  File "/opt/odoo/sources/odoo/openerp/tools/convert.py", line 762, in _tag_record
    id = self.pool['ir.model.data']._update(cr, self.uid, rec_model, self.module, res, rec_id or False, not self.isnoupdate(data_node), noupdate=self.isnoupdate(data_node), mode=self.mode, context=rec_context )
  File "/opt/odoo/sources/odoo/openerp/api.py", line 268, in wrapper
    return old_api(self, *args, **kwargs)
  File "/opt/odoo/sources/odoo/openerp/addons/base/ir/ir_model.py", line 1065, in _update
    res_id = model_obj.create(cr, uid, values, context=context)
  File "/opt/odoo/sources/odoo/openerp/api.py", line 268, in wrapper
    return old_api(self, *args, **kwargs)
  File "/opt/odoo/sources/odoo/openerp/addons/base/ir/ir_ui_view.py", line 255, in create
    context=context)
  File "/opt/odoo/sources/odoo/openerp/api.py", line 268, in wrapper
    return old_api(self, *args, **kwargs)
  File "/opt/odoo/sources/odoo/openerp/api.py", line 372, in old_api
    result = method(recs, *args, **kwargs)
  File "/opt/odoo/sources/odoo/openerp/models.py", line 4093, in create
    record = self.browse(self._create(old_vals))
  File "/opt/odoo/sources/odoo/openerp/api.py", line 266, in wrapper
    return new_api(self, *args, **kwargs)
  File "/opt/odoo/sources/odoo/openerp/api.py", line 508, in new_api
    result = method(self._model, cr, uid, *args, **old_kwargs)
  File "/opt/odoo/sources/odoo/openerp/models.py", line 4284, in _create
    recs._validate_fields(vals)
  File "/opt/odoo/sources/odoo/openerp/api.py", line 266, in wrapper
    return new_api(self, *args, **kwargs)
  File "/opt/odoo/sources/odoo/openerp/models.py", line 1271, in _validate_fields
    raise ValidationError('\n'.join(errors))
ParseError: "ValidateError El(los) campo(s) `arch` fallaron contra la restricción: Invalid view definition
Detalles de error:
El campo `groups_id` no existe
Error de contexto:
Vista `work.order.user.form.edit`
[view_id: 1885, xml_id: n/a, model: res.partner, parent_id: 152]" while parsing /opt/odoo/additional_addons/quipons/contract_work_order_user/views/user_form_edit_view.xml:5, near
<record model="ir.ui.view" id="view_users_simple_form">
   <field name="name">work.order.user.form.edit</field>
   <field name="model">res.partner</field>
   <field name="inherit_id" ref="base.view_users_simple_form"/>
   <field name="mode">primary</field>
   <field name="arch" type="xml">
    <field name="name" position="after">
          <field name="fax"/>
        </field>
   </field>
  </record>
And my current view code:

<?xml version="1.0"?>
<openerp>
 <data>
  <record model="ir.ui.view" id="view_users_simple_form">
   <field name="name">work.order.user.form.edit</field>
   <field name="model">res.partner</field>
   <field name="inherit_id" ref="base.view_users_simple_form" />
   <field name="mode">primary</field>
   <field name="arch" type="xml">
    <field name="name" position="after">
          <field name="fax" />
        </field>
   </field>
  </record>
 </data>
</openerp>
Avatar
Discard
Best Answer

Hi Adrian,


 <field name="model">res.partner</field>
   <field name="inherit_id" ref="base.view_users_simple_form" />

That view is from the model res.users, not from res.partner.



Avatar
Discard
Author

Thanks. I had changed it to res.partner since I didn't know the error was for not adding the base dependency.

Best Answer

Hi Adrian,
In the above example codes for all records you have given the same id, while creating a new record just give a new id for it.  Check whether base is added in depends in the manifest / openerp file.

Thank You

Avatar
Discard
Author

Sorry, look answer above.

Author Best Answer

Hello Niyas, thanks for answering.

Unfortunately I had a different id previously and it didn't work, then I kept same one than base view after reading another post. New changes:

+__openerp.py__:

'depends': ['base',

Below is the current view. I had added some unintented code I didn't notice in the previous version after trying to fix it (fax shouldn't be in, the desired fields instead as I wrote, which in place I wanted to appear after fax):

<?xml version="1.0"?>
<openerp>
 <data>
  <!--record model="ir.ui.view" id="view_users_simple_form"--> <!-- Un usuario dijo que el id se mantuviera -->
  <record model="ir.ui.view" id="view_users_simple_form_extend">
   <field name="name">work.order.user.form.edit</field>
   <field name="model">res.partner</field>
   <field name="inherit_id" ref="base.view_users_simple_form" />
   <field name="mode">primary</field>
   <field name="arch" type="xml">
    <field name="fax" position="after">
          <field name="vat" />
     <field name="license" />
        </field>
   </field>
  </record>
 </data>
</openerp>

It's still giving me that "groups_id field doesn't exist" error (translated it). I inspected base view and it has that named field, I can guess it's interfering.

Avatar
Discard