1
votes

I tried to make a module in Odoo 12 but keep give me an error field doesn't exists, but I already define the field inside the model

Already checked and change a few codes several times but still no luck

model.py

class ProductProduct(models.Model):
    _inherit = 'product.product'

    isbn = fields.Char('ISBN Code', unique=True, help="Shows International Standard Book Number")
    catalog_num = fields.Char('Catalog Number', help="Shows Identification Number of Books")
    lang = fields.Selection(string='Language', selection='_get_lang')
    author_id = fields.Many2one('res.partner','Author',domain=[('penulis','=',True)])
    publisher_id = fields.Many2one('res.partner','Publisher',domain=[('penerbit','=',True)])
    nbpage = fields.Integer('Number of Pages')
    location_id = fields.Many2one('stock.location', 'Location', help="Shows position of book", domain=[('lokasi buku','=',True)])
    num_edition = fields.Integer('No. Edition', help="Edition number of book")
    resensi = fields.Text('Resensi')
    state = fields.Selection([('available','Available'),('rent','Rented')],'State',readonly=True, default='available')

    _sql_constraints = [
        ('unique_barcode','unique(barcode)', 'barcode field must be unique across all the products'),
        ('code_uniq', 'unique (default_code', 'Code of the product must be unique!')
    ]

    @api.model
    def _get_lang(self):
        return self.env['res.lang'].get_installed()

view.xml:

    <record model="ir.ui.view" id="buku_tree_view">
        <field name="name">buku.tree</field>
        <field name="model">product.product</field>
        <field name="arch" type="xml">
            <tree string="Buku">
                <field name="default_code"/>
                <field name="name"/>
                <field name="publisher_id"/>
                <field name="author_id"/>
                <field name="location_id"/>
                <field name="categ_id"/>
                <field name="state"/>
            </tree>
        </field>
    </record>

I keep getting "Field publisher_id does not exist" but as you can see I already define it inside model.py

Error Message:

Odoo Server Error
Traceback (most recent call last):
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 1100, in _validate_fields
    check(self)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 344, in _check_xml
    self.postprocess_and_fields(view.model, view_doc, view.id)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 1085, in postprocess_and_fields
    self.raise_view_error(message, view_id)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 538, in raise_view_error
    raise ValueError(message)
ValueError: Field `publisher_id` does not exist

Error context:
View `buku.tree`
[view_id: 531, xml_id: n/a, model: product.product, parent_id: n/a]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 748, in parse
    self._tags[rec.tag](rec, de, mode=mode)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 653, in _tag_record
    record = model.with_context(rec_context)._load_records([data], self.mode == 'update')
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3795, in _load_records
    records = self.create([data['values'] for data in to_create])
  File "<decorator-gen-32>", line 2, in create
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 452, in _model_create_multi
    return create(self, arg)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 418, in create
    return super(View, self).create(vals_list)
  File "<decorator-gen-3>", line 2, in create
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 452, in _model_create_multi
    return create(self, arg)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3540, in create
    fields[0].determine_inverse(batch_recs)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\fields.py", line 1104, in determine_inverse
    getattr(records, self.inverse)()
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 268, in _inverse_arch
    view.write(data)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 434, in write
    return super(View, self).write(self._compute_defaults(vals))
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3257, in write
    self._write(store_vals)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3401, in _write
    self._validate_fields(vals)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 1104, 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 `publisher_id` does not exist\n\nError context:\nView `buku.tree`\n[view_id: 531, xml_id: n/a, model: product.product, parent_id: n/a]', None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 653, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 312, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\pycompat.py", line 87, in reraise
    raise value
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 695, in dispatch
    result = self._call_function(**self.params)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 344, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\service\model.py", line 97, in wrapper
    return f(dbname, *args, **kwargs)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 337, in checked_call
    result = self.endpoint(*a, **kw)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 938, in __call__
    return self.method(*args, **kw)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 517, in response_wrap
    response = f(*args, **kw)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\addons\web\controllers\main.py", line 966, in call_button
    action = self._call_kw(model, method, args, {})
  File "C:\Program Files (x86)\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 "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 749, in call_kw
    return _call_kw_multi(method, model, args, kwargs)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 736, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "<decorator-gen-61>", line 2, in button_immediate_install
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\addons\base\models\ir_module.py", line 71, in check_and_log
    return method(self, *args, **kwargs)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\addons\base\models\ir_module.py", line 442, in button_immediate_install
    return self._button_immediate_function(type(self).button_install)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\addons\base\models\ir_module.py", line 535, in _button_immediate_function
    modules.registry.Registry.new(self._cr.dbname, update_module=True)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\modules\registry.py", line 86, in new
    odoo.modules.load_modules(registry._db, force_demo, status, update_module)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\modules\loading.py", line 426, in load_modules
    loaded_modules, update_module, models_to_check)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\modules\loading.py", line 318, in load_marked_modules
    perform_checks=perform_checks, models_to_check=models_to_check
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\modules\loading.py", line 224, in load_module_graph
    load_data(cr, idref, mode, kind='data', package=package, report=report)
  File "C:\Program Files (x86)\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 "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 792, in convert_file
    convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 853, in convert_xml_import
    obj.parse(doc.getroot(), mode=mode)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 745, in parse
    self.parse(rec, mode)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 754, in parse
    exc_info[2]
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\pycompat.py", line 86, in reraise
    raise value.with_traceback(tb)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 748, in parse
    self._tags[rec.tag](rec, de, mode=mode)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\convert.py", line 653, in _tag_record
    record = model.with_context(rec_context)._load_records([data], self.mode == 'update')
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3795, in _load_records
    records = self.create([data['values'] for data in to_create])
  File "<decorator-gen-32>", line 2, in create
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 452, in _model_create_multi
    return create(self, arg)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 418, in create
    return super(View, self).create(vals_list)
  File "<decorator-gen-3>", line 2, in create
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 452, in _model_create_multi
    return create(self, arg)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3540, in create
    fields[0].determine_inverse(batch_recs)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\fields.py", line 1104, in determine_inverse
    getattr(records, self.inverse)()
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 268, in _inverse_arch
    view.write(data)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\addons\base\models\ir_ui_view.py", line 434, in write
    return super(View, self).write(self._compute_defaults(vals))
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3257, in write
    self._write(store_vals)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 3401, in _write
    self._validate_fields(vals)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 1104, 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 `publisher_id` does not exist

Error context:
View `buku.tree`
[view_id: 531, xml_id: n/a, model: product.product, parent_id: n/a]
None" while parsing file:/c:/program%20files%20(x86)/odoo%2012.0/server/odoo/addons/aa_library/views/views.xml:18, near
<record model="ir.ui.view" id="buku_tree_view">
        <field name="name">buku.tree</field>
        <field name="model">product.product</field>
        <field name="arch" type="xml">
            <tree string="Buku">
                <field name="default_code"/>
                <field name="name"/>
                <field name="publisher_id"/>
                <field name="author_id"/>
                <field name="location_id"/>
                <field name="categ_id"/>
                <field name="state"/>
            </tree>
        </field>
    </record>

Anyone know what's wrong with my code?

3
Have you added this model.py in init.py file? - Avani Somaiya
@AvaniSomaiya good question, because the rest of the code seems correct. - CZoellner
@AvaniSomaiya I did, I found that I need to Install Inventory module first before install my module - flyingduck92
@CZoellner I did it sir, I found that I must Install Inventory module before my module installed - flyingduck92
Nice, if possible try to answer your question. Module stock indeed has to be in the dependency list in the manifest file of your module, because you're referencing/using model stock.location. - CZoellner

3 Answers

0
votes

If you added the field in the model (.py file) and the view all at once, you'll get this error. Try commenting the field in the view and after running again, you can uncomment it in the view.

0
votes

Your code is perfectly fine, the problem may be because you dint added the model.py file in init.py file. so

  1. import the model.py file in init.py file
  2. Since xml error occurred odoo can't take this update so comment xml file in manifest.py under the section data.
  3. Now restart update, now uncomment xml restart, upgrade it should work.
0
votes

I found that I must Install "Inventory" module before my module installed. Thanks All.