This question has been flagged
4 Replies
4344 Views

Hello,

I built a user class with delegation inheritance on res.partner :

class TrelloUser(models.Model):    
    _name='trello.project.user'
    _inherits={'res.partner': 'odoo_id'}

  odoo_id=fields.Many2one('res.partner', 
                            required=True,
                            ondelete='cascade') 
    external_id=fields.Char('ID in Trello',
                            required=True,
                            readonly=True)


Then, I added a in demo.xml file, to automatically load a user :


<record id="1" model="trello.project.user">
          <field name="odoo_id" ref="base.user_demo" />
          <field name="external_id">extID</field>
</record>


Now, when I update my module, I get the following error message :


Error:
Odoo Server Error

Traceback (most recent call last):
  File "/opt/odoo/odoo/odoo/tools/convert.py", line 744, in parse
    self._tags[rec.tag](rec, de, mode=mode)
  File "/opt/odoo/odoo/odoo/tools/convert.py", line 572, in _tag_record
    model = self.env[rec_model]
  File "/opt/odoo/odoo/odoo/api.py", line 760, in __getitem__
    return self.registry[model_name]._browse((), self)
  File "/opt/odoo/odoo/odoo/modules/registry.py", line 179, in __getitem__
    return self.models[model_name]
KeyError: 'trello.project.user'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/odoo/odoo/odoo/http.py", line 651, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/opt/odoo/odoo/odoo/http.py", line 310, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "/opt/odoo/odoo/odoo/tools/pycompat.py", line 87, in reraise
    raise value
  File "/opt/odoo/odoo/odoo/http.py", line 693, in dispatch
    result = self._call_function(**self.params)
  File "/opt/odoo/odoo/odoo/http.py", line 342, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/opt/odoo/odoo/odoo/service/model.py", line 97, in wrapper
    return f(dbname, *args, **kwargs)
  File "/opt/odoo/odoo/odoo/http.py", line 335, in checked_call
    result = self.endpoint(*a, **kw)
  File "/opt/odoo/odoo/odoo/http.py", line 937, in __call__
    return self.method(*args, **kw)
  File "/opt/odoo/odoo/odoo/http.py", line 515, in response_wrap
    response = f(*args, **kw)
  File "/opt/odoo/odoo/addons/web/controllers/main.py", line 938, in call_button
    action = self._call_kw(model, method, args, {})
  File "/opt/odoo/odoo/addons/web/controllers/main.py", line 926, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/opt/odoo/odoo/odoo/api.py", line 689, in call_kw
    return call_kw_multi(method, model, args, kwargs)
  File "/opt/odoo/odoo/odoo/api.py", line 680, in call_kw_multi
    result = method(recs, *args, **kwargs)
  File "<decorator-gen-48>", line 2, in button_immediate_upgrade
  File "/opt/odoo/odoo/odoo/addons/base/module/module.py", line 71, in check_and_log
    return method(self, *args, **kwargs)
  File "/opt/odoo/odoo/odoo/addons/base/module/module.py", line 603, in button_immediate_upgrade
    return self._button_immediate_function(type(self).button_upgrade)
  File "/opt/odoo/odoo/odoo/addons/base/module/module.py", line 542, in _button_immediate_function
    modules.registry.Registry.new(self._cr.dbname, update_module=True)
  File "/opt/odoo/odoo/odoo/modules/registry.py", line 85, in new
    odoo.modules.load_modules(registry._db, force_demo, status, update_module)
  File "/opt/odoo/odoo/odoo/modules/loading.py", line 376, in load_modules
    force, status, report, loaded_modules, update_module, models_to_check)
  File "/opt/odoo/odoo/odoo/modules/loading.py", line 274, in load_marked_modules
    perform_checks=perform_checks, models_to_check=models_to_check
  File "/opt/odoo/odoo/odoo/modules/loading.py", line 184, in load_module_graph
    _load_data(cr, module_name, idref, mode, kind='demo')
  File "/opt/odoo/odoo/odoo/modules/loading.py", line 95, in _load_data
    tools.convert_file(cr, module_name, filename, idref, mode, noupdate, kind, report)
  File "/opt/odoo/odoo/odoo/tools/convert.py", line 791, in convert_file
    convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
  File "/opt/odoo/odoo/odoo/tools/convert.py", line 852, in convert_xml_import
    obj.parse(doc.getroot(), mode=mode)
  File "/opt/odoo/odoo/odoo/tools/convert.py", line 741, in parse
    self.parse(rec, mode)
  File "/opt/odoo/odoo/odoo/tools/convert.py", line 751, in parse
    exc_info[2]
  File "/opt/odoo/odoo/odoo/tools/pycompat.py", line 86, in reraise
    raise value.with_traceback(tb)
  File "/opt/odoo/odoo/odoo/tools/convert.py", line 744, in parse
    self._tags[rec.tag](rec, de, mode=mode)
  File "/opt/odoo/odoo/odoo/tools/convert.py", line 572, in _tag_record
    model = self.env[rec_model]
  File "/opt/odoo/odoo/odoo/api.py", line 760, in __getitem__
    return self.registry[model_name]._browse((), self)
  File "/opt/odoo/odoo/odoo/modules/registry.py", line 179, in __getitem__
    return self.models[model_name]
odoo.tools.convert.ParseError: "trello.project.user" while parsing /home/cyrille/odoo/addons-dev/draft_odoo_trello/demo/demo.xml:4, near
<record id="1" model="trello.project.user">
          <field name="odoo_id" ref="base.user_demo"/>
          <field name="external_id">ext</field>
</record>


It says KeyError : 'trello.project.user', so I went and checked in Settings | Database Structure | Models and the trello.project.user model is there. So I have no idea why I have this KeyError.
Thanks for your help,

Cyrille (LaLibreRie)

Avatar
Discard
Author

Marius Stedjan It did not solve the issue, but still thank you, I was not aware of this.

Why do you use delegation inheritance? Is this necessary?

Best Answer

Try giving the user record a proper id (this is the xml_id/external id, not the database id). 
The way you are doing it now, will give the user record a xml_id of trello.1, which might conflict with other records, if you have used only integers for the id in other parts of your module.

<record id="project_user_1" model="trello.project.user">
    <field name="odoo_id" ref="base.user_demo" />
    <field name="external_id">extID</field>
</record>
Avatar
Discard
Author Best Answer

I downloaded the database_cleanup module (https://www.odoo.com/apps/modules/11.0/database_cleanup/). I had a lot of orphan modules, models and columns due to a lot of upgrades during the development process. Now that the database has been cleaned up of all those, it works.

Avatar
Discard