Odoo 中文社区

    • 注册
    • 登录
    • 搜索
    • 版块
    • 标签
    • 热门
    • 用户
    • 群组

    Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

    由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

    本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

    开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

    如果您登录系统碰到问题,请在微信公众号留言:

    通过域名方式决定使用哪个数据库的方式分享

    Odoo 开发与实施交流
    6
    9
    8710
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • A
      aornor 最后由 编辑

      当前OPENERP只有一个功能,就是公司内部使用,不过老板又有一个要求,需要给客户那边也用,但是使用的是同一个软件,不同库,客户使用时不能看到其它人使用的库,
      我感觉这个功能应该在多个库时比较有多,当前分享一下做法
      1.有两个域名分别是    a.openerp.com    b.openerp.com
      2.当使用a.openerp.com时,访问数据库A  ,当使用b.openerp.com时,使用数据库B
      3.找到函数:\addons\web\controllers\main.py 下的db_list函数,在函数修改为: ####中为添加的代码
      def db_list(req, force=False):
          proxy = req.session.proxy("db")
          dbs = proxy.list(force)
          h = req.httprequest.environ['HTTP_HOST'].split(':')[0]
          ####################
          onedb=openerp.tools.config.get(h+'_db',False)
          if onedb!=False:
              return [onedb]
          ####################
          d = h.split('.')[0]
          r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d', d)
          dbs = [i for i in dbs if re.match(r, i)]
          return dbs
      4.可以看到,它读取了config中的内容,所以你需要在openerp-server.conf中添加配置:
        a.openerp.com_db=A
        b.openerp.com_db=B
      5.完成

      说明:以前代码不影响正常使用,如果配置文件中没有写相应的数据库,则会按照老方法显示页面,但如要已经配置数据库,那么登录页面中将不会显示数据库选择,强制和已设置的数据库。

      加入ODOO8的方式,修改的代码文件位置是:D:\GreenOdoo\source\openerp\http.py

      修改源码为:

      def db_filter(dbs, httprequest=None):
          httprequest = httprequest or request.httprequest
          h = httprequest.environ.get('HTTP_HOST', '').split(':')[0]
          d, _, r = h.partition('.')
          ##开始进行替换=========
          if r=='':    #只有一级域名
              d='www'
          r=openerp.tools.config.get(d+'_db',dbs)
          ##替换结束=============
          ##原始内容
          #if d == "www" and r:
          #    d = r.partition('.')[0]
          #r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d', d)
          ##原始内容结束
          dbs = [i for i in dbs if re.match(r, i)]
          return dbs

      1 条回复 最后回复 回复 引用 0
      • C
        ccdos 最后由 编辑

        本来就是支持的哦

        关键字:  dbfilter

        =======
        <br / [检测到链接无效,已移除] br />
        有个小bug 修正一下就好了

        1 条回复 最后回复 回复 引用 0
        • P
          Pepsi 最后由 编辑

          这个很好啊,可以不同域名指向了,cccdos那个链接只能同一个域名下的二级域名有效吧?

          1 条回复 最后回复 回复 引用 0
          • C
            ccdos 最后由 编辑

            [quote author=Pepsi link=topic=16199.msg27367#msg27367 date=1390098564]
            这个很好啊,可以不同域名指向了,cccdos那个链接只能同一个域名下的二级域名有效吧?
            [/quote]

            不是的 ,

            事实上是 你n级域名也只认 最左侧的 hosts 名称

            1 条回复 最后回复 回复 引用 0
            • P
              Pepsi 最后由 编辑

              我最终采纳了这个方案,好处是,不同的域名可以指向不同的数据库,域名不用和数据库名存在任何关系,管理员可以设置一个单独的域名,conf文件中不做设置,仍然可以显示并切换database list。
              dbfilter的方案,二级域名的头名跟数据库名要一致,所有的域名都不能显示db list了。 不知道我对dbfilter的理解对不对。。。

              1 条回复 最后回复 回复 引用 0
              • mrshelly
                mrshelly 最后由 编辑

                赞。 建议将该修改提交给官方......

                1 条回复 最后回复 回复 引用 0
                • R
                  rufeng1199 最后由 编辑

                  好帖留名

                  1 条回复 最后回复 回复 引用 0
                  • R
                    ryanemax 最后由 编辑

                    odoo 8.0版本出错TypeError: unhashable type: 'list'
                    请教

                    1 条回复 最后回复 回复 引用 0
                    • First post
                      Last post