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

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

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

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

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



  • 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把多对多数据写入数据库时,其他字段值都能写入成功,只有多对多的字段写入不成功,是格式错误,还是什么,希望提出可以成功写入的方法?



  • 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 是存在中间表里的



  • @Siyuan

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

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



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



  • @萧云飞
    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写入.反之依然.但是都不能关系表数据都写入不成功.

    感谢您的帮助.



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

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

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



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


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待