如何覆盖 Odoo 11 中的 http.py 方法?

How to override http.py methods in Odoo 11?

我想为我的附加组件重写 setup_db 方法,因为在当前情况下你不能从 url 获取带有数据库名称的参数,并且如果用户有超过 1 个数据库我无法从隐身模式 运行 我的登录 link。

我不想让用户先去/web/database/selector

我正在考虑用户去 /web/login?db=example_db_name 然后以某种方式重定向到我的登录名 link。

("somehow" 因为如果你输入它,它会将你重定向到 /web/login,所以我无法从登录页面添加重定向)。

我这样做是假设 odoo.conf 用户有

db_name = False, dbfilter = .

如果您遇到同样的问题,这是我的解决方案。它覆盖了通常有点糟糕的默认方法,但在我们的情况下,我们无能为力。

from odoo import http

class Rooting(http.Root):
    def setup_db(self, httprequest):
        db = httprequest.session.db
        # Check if session.db is legit
        if db:
            if db not in http.db_filter([db], httprequest=httprequest):
                httprequest.session.logout()
                db = None
        if not db:
            if 'db' in httprequest.args:
                db = httprequest.args['db']
                httprequest.session.db = db
        if not db:
            httprequest.session.db = http.db_monodb(httprequest)


http.Root.setup_db = Rooting.setup_db