OpenERP,播种许多与XML的许多关系?

时间:2014-01-17 21:11:45

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

我无法在many-to-many中的xml OpenERP种植one2many的任何地方找到任何示例,是否有人知道这是否可行,如果是,如何?我让M2M使用ref属性,但{{1}}没有。也没有来自openerp帮助网站的回答。

谢谢! 伊恩

2 个答案:

答案 0 :(得分:5)

要了解如何为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中有以下两个对象:

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>

答案 1 :(得分:0)

只是添加到Andrei的答案 - 在Odoo 8中 - 如果你使用来自另一个模块的xml id - 你需要在eval语句中用eval="[(6, 0, [ref('module_name.xml_id'), ref('module_name.xml_id')])]"/>

作为前缀
vertical-center

刚从源代码中的eval使用示例中找到了这一点 - 并认为它可能会派上用场。

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