跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. 求教:关于两个模块间依靠的问题

求教:关于两个模块间依靠的问题

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
9 帖子 3 发布者 6.5k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • D 离线
    D 离线
    dreambecky
    写于 最后由 编辑
    #1

    本人需要重新开发一个生产管理的模块,现在修改了sale模块中工作流的动作,order confirm后要在我自己添加的模块中的需求表中插入数据。同时在需求表中也要有order_line的主键关联,这样我才能在生产中回溯到合同。在模块安装中出现了问题。我修改了sale模块的依靠关系,添加了我的自建模块mrp_new。于是在装sale模块前需要安装自建的mrp_new模块,而我mrp_new模块中的production表又有一个字段叫sale_order_line_id:fields.many2one('sale.order,line','合同明细来源',required=True).于是openerp会报错,找不到sale.order,line这个relation。这个我能理解,因为目前还没有添加sale模块的对象和数据库。那我只有改依存关系,让mrp_new依存于sale模块,但是这样我sale模块中需要插入mrp_new模块中的production表的数据又会出现找不到mrp_new.production的对象了。

    我看了原模块的操作,他建立的关系是sale.order.line中建立一个'procurement_id': fields.many2one('mrp.procurement', 'Procurement'),而不是我在生产需求中建立关系到sale,order,line.这样可以从合同看到生产需求,但是从生产需求怎么看到合同的内容呢?

    初次研究openerp,可能有很多没有了解到的东西,希望各位大大能指导指导我这个疑问。

    1 条回复 最后回复
    0
    • digitalsatoriD 离线
      digitalsatoriD 离线
      digitalsatori 管理员
      写于 最后由 编辑
      #2

      在模块开发中不应直接修改已有模块。你修改sale模块的workflow并在sale模块中添加对mrp-new的依赖的做法是不正确的,同时,因为两个模块之间互相依赖,造成循环引用。应该是在mrp-new中继承sale模块中的类并加以改造。

      【上海先安科技】(tony AT openerp.cn)

      1 条回复 最后回复
      0
      • D 离线
        D 离线
        dreambecky
        写于 最后由 编辑
        #3

        我新建个class sale_new继承于sale,那么我的视图,工作流等等是不是都需要重新写??

        1 条回复 最后回复
        0
        • D 离线
          D 离线
          dreambecky
          写于 最后由 编辑
          #4

          假如我仍然采用sale现有的工作流步骤,但是在继承类中重写了他每一步的def,那么安装新模块前,他采用的是原有的业务逻辑,安装后就用的我重写的业务逻辑了??

          1 条回复 最后回复
          0
          • mrshellyM 离线
            mrshellyM 离线
            mrshelly
            写于 最后由 编辑
            #5

            super(类名, self).方法( 就可以调用被继承类的方法).

            还是那句老话, 多看老肖教程.....

            1 条回复 最后回复
            0
            • D 离线
              D 离线
              dreambecky
              写于 最后由 编辑
              #6

              我不是要调用父类方法,我是要修改父类的方法,要重写。教程我看过了,就是入门的东西,涉及到核心代码的编写很多要靠试,我最开始就是试着改原模块,幸好提醒了我可以用继承来实现,这样让我恍然大悟,省却了很多时间,这就是来这里提问的好处。
              openerp资料不好找,官方文档和一些资料都是e文,而且还不好搜索,看起来很慢,而且光看不试也记不住什么东西。

              只所以有这样的疑问,是我发现这里的继承同传统意义上的继承是有区别的,这里的继承在openerp看来,只是对应在原有数据库表上进行了修改,可以说是同一个对象,重写方法后,因为工作流仍然用的是原有模块的工作流。工作流步骤里定义方法他是找父类的方法呢,还是找子类的方法。

              [[i] 本帖最后由 dreambecky 于 2010-5-15 18:06 编辑 [/i]]

              1 条回复 最后回复
              0
              • mrshellyM 离线
                mrshellyM 离线
                mrshelly
                写于 最后由 编辑
                #7

                继承后就是同一个对象了. 不存在父与子...

                子的工作流就是父的工作流...

                子的工作流不重写的话, 就是父的工作流 然后 父的工作流中可以使用子的方法.

                只要你的子方法要在工作流中使用, 而父的工作流中没有相应的节点调用的话, 就要重写修改父工作流...

                1 条回复 最后回复
                0
                • D 离线
                  D 离线
                  dreambecky
                  写于 最后由 编辑
                  #8

                  tks,我已经试出来了,确实是这样,重写后直接用的子类的方法了。

                  1 条回复 最后回复
                  0

                  • 登录

                  • 没有帐号? 注册

                  • 登录或注册以进行搜索。
                  • 第一个帖子
                    最后一个帖子
                  0
                  • 版块
                  • 标签
                  • 热门
                  • 用户
                  • 群组