跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 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. XML RPC 中Many2many字段值写入postgres数据库

XML RPC 中Many2many字段值写入postgres数据库

已定时 已固定 已锁定 已移动 Odoo 新手求助
7 帖子 3 发布者 3.8k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • H 离线
    H 离线
    hui
    写于 最后由 编辑
    #1

    python 代码:

    class PartFamilyBase(models.Model):
        _name = 'part.family'
        _description = 'Part Family'
    
        name = fields.Char('Name', required=True)
        code = fields.Char('Code', required=True)
        description = fields.Char('Description')
        value_drive_ids = fields.Many2many('part.value.drive', string='Default Value Drive')
        parent_id = fields.Many2one('part.family', string='Parent Famlily')
    
    

    数据库中字段:
    0_1499225489378_part.family db.png

    导入脚本处理的结果:

     vals = {
                    'code': j[0],
                    'name':  j[1],
                    'parent_id': p_id,
                    'value_drive_ids': (0, 0, j[3])
                }
                print(vals)
                #{'parent_id': '', 'value_drive_ids': (0, 0, [18, 19]), 'code': 'ABB001', 'name': 'Industrial'}
    
                new_id = models.execute_kw(db, uid, password, 'part.family', 'create', [vals])
                print(new_id)
    

    问题:
    1.python 代码中的多对多字段可以加唯一约束吗?
    2.代码中的变量名为value_drive_ids,是Many2many类型的;数据库中为value_drive_id,且是Integer类型的,这样表示正确吗?
    3.XML RPC把多对多数据写入数据库时,其他字段值都能写入成功,只有多对多的字段写入不成功,是格式错误,还是什么,希望提出可以成功写入的方法?

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

      https://www.odoo.com/documentation/10.0/reference/orm.html

      Many2many field; the value of such a field is the recordset.

      Parameters
      comodel_name -- name of the target model (string)
      The attribute comodel_name is mandatory except in the case of related fields or field extensions.

      Parameters
      relation -- optional name of the table that stores the relation in the database (string)
      column1 -- optional name of the column referring to "these" records in the table relation (string)
      column2 -- optional name of the column referring to "those" records in the table relation (string)

      The attributes relation, column1 and column2 are optional. If not given, names are automatically generated from model names, provided model_name and comodel_name are different!

      Parameters
      domain -- an optional domain to set on candidate values on the client side (domain or string)
      context -- an optional context to use on the client side when handling that field (dictionary)
      limit -- optional limit to use upon read (integer)

      Many2many 是存在中间表里的

      H 1 条回复 最后回复
      0
      • H 离线
        H 离线
        hui
        在 回复了 Siyuan 最后由 编辑
        #3

        @Siyuan

        1.Many2many 是存在中间表的,需要我手动填入关系数据吗?
        2.不好意思,您上面解释的是说明哪个问题的.

        谢谢,感谢您花时间解答.

        1 条回复 最后回复
        0
        • 萧 离线
          萧 离线
          萧云飞
          写于 最后由 编辑
          #4

          1.多对多按理可以加唯一约束,我没有实践,你可以用sql_constraints试试
          2.多对多的字段是不会存在表里面的,你表里面有一个这个字段可能是你以前定义的,然后升级模块,py文件删除的字段是不会在数据库里面删除的(但是有moved标识)。除非你卸载模块。
          3.你的多对多传值错误,多对多传的是一个list,里面包含多个tuple,每个tuple包含三个元素,你的value_drive_ids应该写为[(0, 0, [18, 19])]

          H 1 条回复 最后回复
          0
          • H 离线
            H 离线
            hui
            在 回复了 萧云飞 最后由 hui 编辑
            #5

            @萧云飞
            1.比如写的约束,我修改原先的约束后,数据库是增加了一个新的约束,原先的约束并没有自动删除的,这个是什么原因?
            2.多对多的我value_drive_ids写为[(0, 0, [18, 19])],Many2many的那张关系表不会自动写入对应关系的.
            3.Many2many写入时,跟写入数据的先后顺序有关吗,比如这里是part.family和part.value.drive模块,我先写入part.value.drived的数据,再次写入part.family的数据,同时把value_drive_ids写入.反之依然.但是都不能关系表数据都写入不成功.

            感谢您的帮助.

            萧 1 条回复 最后回复
            0
            • 萧 离线
              萧 离线
              萧云飞
              在 回复了 hui 最后由 编辑
              #6

              @1234567 在 XML RPC 中Many2many字段值写入postgres数据库 中说:

              1.比如写的约束,我修改原先的约束后,数据库是增加了一个新的约束,原先的约束并没有自动删除的,这个是什么原因?

              抱歉,上午回答错误。没有删除的原因我也不清楚。many2many建立已有数据关联是用[(6, 0, [])],已有数据的关联时需要写入顺序的。建议再看看官方文档

              H 1 条回复 最后回复
              0
              • H 离线
                H 离线
                hui
                在 回复了 萧云飞 最后由 编辑
                #7

                @萧云飞
                谢谢啦.
                [(4,id)]也可以的.你说的写入顺序具体是指什么?

                1 条回复 最后回复
                0

                • 登录

                • 没有帐号? 注册

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