Search code examples
pythonodoo

Odoo controller inheritance


I'm struggling with simple on first look issue. I'm trying to override set of required fields at billing address form of eCommerce addon.

For that I've created custom addon (with scaffold command) and trying to override method  _get_mandatory_billing_fields of WebsiteSale class.

Here is my only changes to myaddon/controllers/controllers.py, rest of the addon content is what I've got with scaffolding

from addons.website_sale.controllers.main import WebsiteSale

class WebsiteSaleInherit(WebsiteSale):
    def _get_mandatory_billing_fields(self):
        return ["name","email"]

Looks quite logic, but when I'm trying to install this module I'm getting error in WebsiteSale class code

Traceback (most recent call last):
  File "C:\development\odoo\odoo\service\server.py", line 1198, in preload_registries
    registry = Registry.new(dbname, update_module=update_module)
  File "C:\development\odoo\odoo\modules\registry.py", line 89, in new
    odoo.modules.load_modules(registry._db, force_demo, status, update_module)
  File "C:\development\odoo\odoo\modules\loading.py", line 449, in load_modules
    processed_modules += load_marked_modules(cr, graph,
  File "C:\development\odoo\odoo\modules\loading.py", line 346, in load_marked_modules
    loaded, processed = load_module_graph(
  File "C:\development\odoo\odoo\modules\loading.py", line 178, in load_module_graph
    load_openerp_module(package.name)
  File "C:\development\odoo\odoo\modules\module.py", line 358, in load_openerp_module
    __import__('odoo.addons.' + module_name)
  File "c:\development\odoo\addons\1test-addon\__init__.py", line 3, in <module>
    from . import controllers
  File "c:\development\odoo\addons\1test-addon\controllers\__init__.py", line 3, in <module>
    from . import controllers
  File "c:\development\odoo\addons\1test-addon\controllers\controllers.py", line 3, in <module>
    from addons.website_sale.controllers.main import WebsiteSale
  File "C:\development\odoo\addons\website_sale\__init__.py", line 5, in <module>
    from . import models
  File "C:\development\odoo\addons\website_sale\models\__init__.py", line 4, in <module>
    from . import account_move
  File "C:\development\odoo\addons\website_sale\models\account_move.py", line 7, in <module>
    class AccountMove(models.Model):
  File "C:\development\odoo\odoo\models.py", line 167, in __init__
    assert self.__module__.startswith('odoo.addons.'), \
AssertionError: Invalid import of addons.website_sale.models.account_move.AccountMove, it should start with 'odoo.addons'.

Looks like I do some mistake during inheritance. Any hint where to dig to solve this would be very appreciated!


Solution

  • I will answer myself

    That was just a stupid error in import

    WRONG
    from addons.website_sale.controllers.main import WebsiteSale
    
    RIGHT
    from odoo.addons.website_sale.controllers.main import WebsiteSale