跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 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. M2m字段数值传递

M2m字段数值传递

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

    试试这个

    <br />#假设lead 是 osv object<br />&#039;categ_sa_id&#039;: [ (6, 0, [o.id for o in lead.categ_sa_id])]&nbsp; ,&nbsp; #试试这个<br />
    



    参考 ~/openerp/openerp/osv/orm.py 中 write () 方法 第3807行
                + For a many2many field, a list of tuples is expected.
                    ......
                    Example:
                        [(6, 0, [8, 5, 6, 4])] sets the many2many to ids [8, 5, 6, 4]

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

      非常感谢,我找到这段代码注释了,但是真的是看不懂啊。 😢
      For a many2many field, a list of tuples is expected. Here is the list of tuple that are accepted, with the corresponding semantics

      (0, 0,  { values })    link to a new record that needs to be created with the given values dictionary
      (1, ID, { values })    update the linked record with id = ID (write values on it)
      (2, ID)                remove and delete the linked record with id = ID (calls unlink on ID, that will delete the object completely, and the link to it as well)
      (3, ID)                cut the link to the linked record with id = ID (delete the relationship between the two objects but does not delete the target object itself)
      (4, ID)                link to existing record with id = ID (adds a relationship)
      (5)                    unlink all (like using (3,ID) for all linked records)
      (6, 0, [IDs])          replace the list of linked IDs (like using (5) then (4,ID) for each ID in the list of IDs)

      Example:
        [(6, 0, [8, 5, 6, 4])] sets the many2many to ids [8, 5, 6, 4]

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

        这个example这样代码是什么意思呢?似乎看着不像Python代码。

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

          For a many2many field, a list of tuples is expected.
          对于many2many 字段,需要提供一个 由 tuples 组成的 list

          您的代码中 lead.categ_sa_id 这里应该是一个 osv object ,所以
          'categ_sa_id': [(6, 0, [o.id for o in lead.categ_sa_id])],

          试试吧  😄

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

            非常感谢,我晚上回去试试再来报告

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

              没有什么可以表达我的感激之情了。
              这行代码完全可以满足需要。
              谢谢wangbuke,非常感谢。

              1 条回复 最后回复
              0
              • JoshuaJ 离线
                JoshuaJ 离线
                Joshua 管理员
                写于 最后由 编辑
                #8

                以前写了个博客关于这个的:http://cn.openerp.cn/289 ,楼主也可以参考下
                many2many

                (0,0,{values}) 根据values里面的信息新建一个记录。

                (1,ID,{values})更新id=ID的记录(写入values里面的数据)

                (2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)

                (3,ID) 切断主从数据的链接关系但是不删除这个数据

                (4,ID) 为id=ID的数据添加主从链接关系。

                (5) 删除所有的从数据的链接关系就是向所有的从数据调用(3,ID)

                (6,0,[IDs]) 用IDs里面的记录替换原来的记录(就是先执行(5)再执行循环IDs执行(4,ID))

                例子[(6, 0, [8, 5, 6, 4])] 设置 many2many to ids [8, 5, 6, 4]

                one2many

                (0, 0,{ values })根据values里面的信息新建一个记录。

                (1,ID,{values}) 更新id=ID的记录(对id=ID的执行write 写入values里面的数据)

                (2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)

                例子:

                [(0,0,{'field_name':field_value_record1,...}),(0,0,{'field_name':field_value_record})]

                many2one的字段比较简单,直接填入已经存在的数据的id或者填入False删除原来的记录。

                【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

                1 条回复 最后回复
                0
                • J 离线
                  J 离线
                  jerry79
                  写于 最后由 编辑
                  #9

                  谢谢Joshua,我现在终于理解了这段说明的含义了,非常感谢

                  1 条回复 最后回复
                  0
                  • C 离线
                    C 离线
                    ccdos
                    写于 最后由 编辑
                    #10

                    这个看来是难点之一啊

                    经常有人问

                    1 条回复 最后回复
                    0

                    • 登录

                    • 没有帐号? 注册

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