【问题标题】:OpenERP, seeding Many2Many relationships with XML?OpenERP,用 XML 播种 Many2Many 关系?
【发布时间】:2014-01-17 21:11:44
【问题描述】:

我在OpenERP 中从xml 数据播种many-to-many 的任何地方都找不到任何示例,有谁知道这是否可行,如果可以,怎么办?我得到了 one2many 使用 ref 属性,但没有 M2M 。 openerp 帮助站点也没有回答。

谢谢! 伊恩

【问题讨论】:

    标签: xml database many-to-many openerp seeding


    【解决方案1】:

    要了解如何为 many2many 关系指定数据,您可能需要查看此文档:

    https://doc.openerp.com/v6.0/developer/2_5_Objects_Fields_Methods/methods.html/#osv.osv.osv.write

    例如,下面给出了一个 id 列表的引用:

    [(6, 0, [id1, id2, id3, ])]
    

    对于在 XML 文件中使用 many2many 关系,我建议阅读以下内容:

    https://doc.openerp.com/5.0/developer/5_16_data_serialization/xml_serialization/

    让我们以下面的例子来说明你的情况。由于您没有向我们提供代码示例,因此假设我们在新的 test_module 中有以下 2 个对象:

    import netsvc
    import pooler
    from osv import fields, osv
    
    class group(osv.osv):
        _name = 'test_module.group'
        _columns = {
            'name': fields.char("Name", size=128,),
            }
    group()
    
    class user(osv.osv):
        _name = 'test_module.user'
        _columns = {
            'name': fields.char("Name", size=128,),
            'group_ids': fields.many2many('test_module.group',
                                          'test_module_user_group_rel',
                                          'user_id', 'group_id', 'Groups'),
    
    user()
    

    现在我们可以创建一个demo.xml 文件来在安装和更新时填充数据库。此示例 XML 包含 4 个组和 2 个用户的记录。每个用户都与两个不同的组相关:

    <?xml version="1.0" encoding="utf-8"?>
    <openerp>
        <data>
            <record id="group_1" model="test_module.group">
                <field name="name" eval="'Group 1'"/>
            </record>
            <record id="group_2" model="test_module.group">
                <field name="name" eval="'Group 2'"/>
            </record>
            <record id="group_3" model="test_module.group">
                <field name="name" eval="'Group 3'"/>
            </record>
            <record id="group_4" model="test_module.group">
                <field name="name" eval="'Group 4'"/>
            </record>
    
            <record id="user_1" model="test_module.user">
                <field name="name" eval="'User 1'"/>
                <field name="group_ids"
                       eval="[(6, 0, [group_1, group_3, ])]"/>
            </record>
            <record id="user_2" model="test_module.user">
                <field name="name" eval="'User 2'"/>
                <field name="group_ids"
                       eval="[(6, 0, [group_2, group_3, ])]"/>
            </record>
        </data>
    </openerp>
    

    【讨论】:

    【解决方案2】:

    只是为了添加到 Andrei 的答案中 - 在 Odoo 8 中 - 如果您使用来自另一个模块的 xml id - 您需要在 eval 语句中的 id 前面加上 ref():

    eval="[(6, 0, [ref('module_name.xml_id'), ref('module_name.xml_id')])]"/>
    

    刚刚从源代码中的 eval 使用示例中发现了这一点 - 并认为它可能对某人有用。

    我不确定这是否也适用于与 eval 相同的模块中的 xml id - 或者它是否特定于 Odoo 8。

    【讨论】:

      猜你喜欢
      • 2012-03-11
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多