跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 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 开发与实施交流
7 帖子 3 发布者 4.7k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • S 离线
    S 离线
    separater
    写于 最后由 编辑
    #1

    我想把以前建立的一个order_line的内容拷贝到正在创建的一个order_line上,拷贝动作发生在我在form的下拉框中选择了原来的order以后,我想通过on_change方法来实现:
        def onchange_linked_order(self, cr, uid, ids, order_id, context=None):
            logistic_order_obj = self.pool.get('logistic.order')
            val = {}
            if order_id:
                order = logistic_order_obj.browse(cr,uid,order_id,context)
                val = {'order_line' : [line._id for line in order.order_line]}
            return {'value':val}

    其中order_line是logistic.order上的一个字段
    'order_line': fields.one2many('logistic.order.line', 'order_id', 'Order Lines'),

    我这样做以后,我发现结果是在添加新的订单后,原来那张订单的行内容消失了。估计是在数据库里的映射发生了变化。我期望的行为是不影响原来的订单行。

    各位大侠有没有好的办法解决这个问题?

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

      你将原来的订单行记录指向了新的订单了,旧订单当然就没有订单行数据了。你应该用copy的方法将订单行内容复制过来。

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

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

        你说得对。我这样修改了一下:
            def onchange_linked_order(self, cr, uid, ids, order_id, context=None):
                logistic_order_line_obj = self.pool.get('logistic.order.line')
                val = {}
                if order_id:
                    order = self.browse(cr,uid,order_id,context)
                    lines = [line._id for line in order.order_line]
                    new_lines = logistic_order_line_obj.logistic_order_line_create(cr,uid,lines,context)
                    val = {'order_line' : new_lines}
                return {'value':val}

        在logistic_order_line_create里我是用了create方法,导致required field,也就是这个
        'order_id': fields.many2one('logistic.order', 'Order Reference', ondelete='cascade', required=True)
        无法填。但是在创建Order的时候,实际上这个order_id还是未知的。

        这个问题如何解决?如果用copy来做的话,如何能够得到新的line的id传给"order_line"?


            def logistic_order_line_create(self, cr, uid, ids, context=None):
                if context is None:
                    context = {}

                create_ids = []
               
                for line in self.browse(cr, uid, ids, context=context):
                    vals = self.__prepare_logistic_order_line(cr, uid, line, context)
                    if vals:
                        inv_id = self.pool.get('logistic.order.line').create(cr, uid, vals, context=context)
                        create_ids.append(inv_id)
                return create_ids

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

          我现在采用copy_data的方式来做,
              def logistic_order_line_create(self, cr, uid, ids, context=None):
                  if context is None:
                      context = {}

                  create_ids = []
                 
                  for line in self.browse(cr, uid, ids, context=context):
                      vals = self.copy_data(cr, uid, line._id, context)
                      if vals:
                          inv_id = self.pool.get('logistic.order.line').create(cr, uid, vals, context=context)
                          create_ids.append(inv_id)
                  return create_ids
          再将
                      new_lines = logistic_order_line_obj.logistic_order_line_create(cr,uid,lines,context)
                      val = {'order_line' : new_lines}

          这样可以实现拷贝。但是如果我修改行上的内容,这个修改会产生如下效果:
          1.新订单上没有这一行
          2.link的订单上多了一行,值为修改后的内容。

          这个问题如何解决?

          [quote author=digitalsatori link=topic=8056.msg17674#msg17674 date=1374224613]
          你将原来的订单行记录指向了新的订单了,旧订单当然就没有订单行数据了。你应该用copy的方法将订单行内容复制过来。
          [/quote]

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

            [(0,0, 你的订单行数据1), (0,0, 你的订单行数据2) ]


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

              谢谢斑竹~~问题已经解决。通过调试进入one2many的set函数,我理解了这个方法的含义。

              [quote author=mrshelly link=topic=8056.msg17702#msg17702 date=1374378529]
              [(0,0, 你的订单行数据1), (0,0, 你的订单行数据2) ]
              [/quote]

              1 条回复 最后回复
              0

              • 登录

              • 没有帐号? 注册

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