This question has been flagged

I am currently making my way through the tutorial for creating the custom Open Academy Module. I am getting stuck in the inheritance section.  I am trying to inherit the res.partner model and add the instructor and session_ids fields to id. I currently have the module and installed and able to access it. When trying to upgrade I am a lengthy error message about the instructor field not existing. I have tried restarting the PostgreSQL_For_Odoo - PostgreSQL Server 9.5 and odoo-server-12.0 services before running the Update Apps List. Afterwards I go and try and upgrade the module resulting in the below error.


Error:

Odoo Server Error


Traceback (most recent call last):

  File "D:\Odoo 12.0\server\odoo\models.py", line 1108, in _validate_fields

    check(self)

  File "d:\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 351, in _check_xml

    self.postprocess_and_fields(view.model, view_doc, view.id)

  File "d:\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 1096, in postprocess_and_fields

    self.raise_view_error(message, view_id)

  File "d:\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 548, in raise_view_error

    raise ValueError(message)

ValueError: Field `instructor` does not exist


Error context:

View `partner.instructor`

[view_id: 1609, xml_id: n/a, model: res.partner, parent_id: 113]


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "D:\Odoo 12.0\server\odoo\tools\convert.py", line 757, in parse

    self._tags[rec.tag](rec, de, mode=mode)

  File "D:\Odoo 12.0\server\odoo\tools\convert.py", line 662, in _tag_record

    record = model.with_context(rec_context)._load_records([data], self.mode == 'update')

  File "D:\Odoo 12.0\server\odoo\models.py", line 3838, in _load_records

    records = self._load_records_create([data['values'] for data in to_create])

  File "D:\Odoo 12.0\server\odoo\models.py", line 3752, in _load_records_create

    return self.create(values)

  File "<decorator-gen-32>", line 2, in create

  File "D:\Odoo 12.0\server\odoo\api.py", line 452, in _model_create_multi

    return create(self, arg)

  File "d:\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 428, in create

    return super(View, self).create(vals_list)

  File "<decorator-gen-3>", line 2, in create

  File "D:\Odoo 12.0\server\odoo\api.py", line 452, in _model_create_multi

    return create(self, arg)

  File "D:\Odoo 12.0\server\odoo\models.py", line 3569, in create

    fields[0].determine_inverse(batch_recs)

  File "D:\Odoo 12.0\server\odoo\fields.py", line 1110, in determine_inverse

    getattr(records, self.inverse)()

  File "d:\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 275, in _inverse_arch

    view.write(data)

  File "d:\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 444, in write

    return super(View, self).write(self._compute_defaults(vals))

  File "D:\Odoo 12.0\server\odoo\models.py", line 3284, in write

    self._write(store_vals)

  File "D:\Odoo 12.0\server\odoo\models.py", line 3430, in _write

    self._validate_fields(vals)

  File "D:\Odoo 12.0\server\odoo\models.py", line 1112, in _validate_fields

    raise ValidationError("%s\n\n%s" % (_("Error while validating constraint"), tools.ustr(e)))

odoo.exceptions.ValidationError: ('Error while validating constraint\n\nField `instructor` does not exist\n\nError context:\nView `partner.instructor`\n[view_id: 1609, xml_id: n/a, model: res.partner, parent_id: 113]', None)


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "D:\Odoo 12.0\server\odoo\http.py", line 654, in _handle_exception

    return super(JsonRequest, self)._handle_exception(exception)

  File "D:\Odoo 12.0\server\odoo\http.py", line 312, in _handle_exception

    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])

  File "D:\Odoo 12.0\server\odoo\tools\pycompat.py", line 87, in reraise

    raise value

  File "D:\Odoo 12.0\server\odoo\http.py", line 696, in dispatch

    result = self._call_function(**self.params)

  File "D:\Odoo 12.0\server\odoo\http.py", line 344, in _call_function

    return checked_call(self.db, *args, **kwargs)

  File "D:\Odoo 12.0\server\odoo\service\model.py", line 97, in wrapper

    return f(dbname, *args, **kwargs)

  File "D:\Odoo 12.0\server\odoo\http.py", line 337, in checked_call

    result = self.endpoint(*a, **kw)

  File "D:\Odoo 12.0\server\odoo\http.py", line 939, in __call__

    return self.method(*args, **kw)

  File "D:\Odoo 12.0\server\odoo\http.py", line 517, in response_wrap

    response = f(*args, **kw)

  File "d:\odoo 12.0\server\odoo\addons\web\controllers\main.py", line 966, in call_button

    action = self._call_kw(model, method, args, {})

  File "d:\odoo 12.0\server\odoo\addons\web\controllers\main.py", line 954, in _call_kw

    return call_kw(request.env[model], method, args, kwargs)

  File "D:\Odoo 12.0\server\odoo\api.py", line 749, in call_kw

    return _call_kw_multi(method, model, args, kwargs)

  File "D:\Odoo 12.0\server\odoo\api.py", line 736, in _call_kw_multi

    result = method(recs, *args, **kwargs)

  File "<decorator-gen-67>", line 2, in button_immediate_upgrade

  File "d:\odoo 12.0\server\odoo\addons\base\models\ir_module.py", line 73, in check_and_log

    return method(self, *args, **kwargs)

  File "d:\odoo 12.0\server\odoo\addons\base\models\ir_module.py", line 613, in button_immediate_upgrade

    return self._button_immediate_function(type(self).button_upgrade)

  File "d:\odoo 12.0\server\odoo\addons\base\models\ir_module.py", line 552, in _button_immediate_function

    modules.registry.Registry.new(self._cr.dbname, update_module=True)

  File "D:\Odoo 12.0\server\odoo\modules\registry.py", line 86, in new

    odoo.modules.load_modules(registry._db, force_demo, status, update_module)

  File "D:\Odoo 12.0\server\odoo\modules\loading.py", line 417, in load_modules

    force, status, report, loaded_modules, update_module, models_to_check)

  File "D:\Odoo 12.0\server\odoo\modules\loading.py", line 313, in load_marked_modules

    perform_checks=perform_checks, models_to_check=models_to_check

  File "D:\Odoo 12.0\server\odoo\modules\loading.py", line 222, in load_module_graph

    load_data(cr, idref, mode, kind='data', package=package, report=report)

  File "D:\Odoo 12.0\server\odoo\modules\loading.py", line 68, in load_data

    tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind, report)

  File "D:\Odoo 12.0\server\odoo\tools\convert.py", line 801, in convert_file

    convert_xml_import(cr, module, fp, idref, mode, noupdate, report)

  File "D:\Odoo 12.0\server\odoo\tools\convert.py", line 864, in convert_xml_import

    obj.parse(doc.getroot(), mode=mode)

  File "D:\Odoo 12.0\server\odoo\tools\convert.py", line 763, in parse

    exc_info[2]

  File "D:\Odoo 12.0\server\odoo\tools\pycompat.py", line 86, in reraise

    raise value.with_traceback(tb)

  File "D:\Odoo 12.0\server\odoo\tools\convert.py", line 757, in parse

    self._tags[rec.tag](rec, de, mode=mode)

  File "D:\Odoo 12.0\server\odoo\tools\convert.py", line 662, in _tag_record

    record = model.with_context(rec_context)._load_records([data], self.mode == 'update')

  File "D:\Odoo 12.0\server\odoo\models.py", line 3838, in _load_records

    records = self._load_records_create([data['values'] for data in to_create])

  File "D:\Odoo 12.0\server\odoo\models.py", line 3752, in _load_records_create

    return self.create(values)

  File "<decorator-gen-32>", line 2, in create

  File "D:\Odoo 12.0\server\odoo\api.py", line 452, in _model_create_multi

    return create(self, arg)

  File "d:\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 428, in create

    return super(View, self).create(vals_list)

  File "<decorator-gen-3>", line 2, in create

  File "D:\Odoo 12.0\server\odoo\api.py", line 452, in _model_create_multi

    return create(self, arg)

  File "D:\Odoo 12.0\server\odoo\models.py", line 3569, in create

    fields[0].determine_inverse(batch_recs)

  File "D:\Odoo 12.0\server\odoo\fields.py", line 1110, in determine_inverse

    getattr(records, self.inverse)()

  File "d:\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 275, in _inverse_arch

    view.write(data)

  File "d:\odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 444, in write

    return super(View, self).write(self._compute_defaults(vals))

  File "D:\Odoo 12.0\server\odoo\models.py", line 3284, in write

    self._write(store_vals)

  File "D:\Odoo 12.0\server\odoo\models.py", line 3430, in _write

    self._validate_fields(vals)

  File "D:\Odoo 12.0\server\odoo\models.py", line 1112, in _validate_fields

    raise ValidationError("%s\n\n%s" % (_("Error while validating constraint"), tools.ustr(e)))

odoo.tools.convert.ParseError: "Error while validating constraint


Field `instructor` does not exist


Error context:

View `partner.instructor`

[view_id: 1609, xml_id: n/a, model: res.partner, parent_id: 113]

None" while parsing file:/d:/odoo 12.0/server/odoo/addons/openacademy/views/partner.xml:4, near

<record model="ir.ui.view" id="partner_instructor_form_view">

      <field name="name">partner.instructor</field>

      <field name="model">res.partner</field>

      <field name="inherit_id" ref="base.view_partner_form"/>

      <field name="arch" type="xml">

          <notebook position="inside">

              <page string="Sessions">

                  <group>

                      <field name="instructor"/>

                      <field name="session_ids"/>

                  </group>

              </page>

          </notebook>

      </field>

  </record>

Avatar
Discard
Author

It turns out I was trying to import the .py file where I was doing the inheritance in the work place. I have been following this tutorial for creating a module: https://www.odoo.com/documentation/12.0/howtos/backend.html.

In the tutorial it says Create a file openacademy/models/partner.py and import it in __init__.py. Where I went wrong it implies you need to add the import to the __init__.py in the root of your module. When it needs to actually be in imported in the __init__.py inside the models folder, since that is where you file exists.

Interestingly moving the import to the correct place and restarting the odoo server didn't fix the problem. I had to restart the module from scratch!