As usual in Odoo, i wanted to override a method (get_login_domain) of the res.users model (defined in the addons/base), that is already overridden in another inherited model (defined in the addons/website):
[1] Original method defined in addons/base/models/res_users.py:
class ResUsers(models.Model):
_name = 'res.users'
@api.model
def _get_email_domain(self, email):
return [('email', '=', email)]
@classmethod
def _login(cls, db, login, password, user_agent_env):
if not password:
raise AccessDenied()
ip = request.httprequest.environ['REMOTE_ADDR'] if request else 'n/a'
try:
with cls.pool.cursor() as cr:
self = api.Environment(cr, SUPERUSER_ID, {})[cls._name]
with self._assert_can_auth(user=login):
user = self.search(self._get_login_domain(login), order=self._get_login_order(), limit=1)
...
[2] An inherited model with a overridden method in official addons addons/website/models/res_users.py
class ResUsers(models.Model):
_inherit = 'res.users'
@api.model
def _get_login_domain(self, login):
website = self.env['website'].get_current_website()
return super(ResUsers, self)._get_login_domain(login) + website.website_domain()
[3] And now my overridden method in the inherited model of my custom module: /user/mycustom_module/models/res_users.py
class ResUsers(models.Model):
_inherit = 'res.users'
@api.model
def _get_login_domain(self, login):
website = self.env['website'].get_current_website()
is_shared_user_account = self.env['ir.config_parameter'].sudo().get_param('shared_user_account', True)
if not is_shared_user_account:
return [('login', '=', login)] + website.website_domain()
else:
return [('login', '=', login)]
#return super(ResUsers, self)._get_login_domain(login)
DEBUGGER FLOW (Step into) with breakpoint on
[1] user=self.search(self._get_login_domain(login), order=self._get_login_order(), limit=1)
--> [1] get_login_domain
--> [2] get_login_domain
--> [3] get_login_domain
[3]return --> [2] get_login_domain
[2]return --> back to initial breakpoint
I am wondering why i can not override this method in [3], the way i do it usually in odoo, because while debugging, it goes through my custom method but its return redirect to the method of the first inherited [2]model (from website/models/res_users.py), where it gets overridden, so that the end result is always of that kind: [('login', '=', xxxlogin),('website_id','in',(False, xxxwebsiteid))]