如何在many2many关系中添加和显示一些属性(OpenERP7)?

时间:2014-10-14 11:53:09

标签: python many-to-many openerp openerp-7

这是一个棘手的问题。

我正在尝试将一些字段添加到many2many表中。我在谷歌搜索,我发现我必须创建一个中间表来存储这些字段。但它运作得不好。

我的例子: 我创建了一个表( training_course )。合作伙伴可以加入许多 training_course ,而 training_course 由许多合作伙伴组成(因此,这是 many2many 关系)。我必须存储合作伙伴加入课程的日期。

所以,在合作伙伴表格中,我必须看到他加入的课程列表,每个人都有他们的日期。

我的代码是:

res_partner_course_rel (这是我生成的中间类 - 名称= ' res.partner.course.rel' - )

 _columns = {
        'partner_id': fields.many2one('res.partner', 'Partner', ondelete='cascade'),
        'course_id': fields.many2one('training.course', 'Course', ondelete='cascade'),
        'date': fields.date('Joining date'),
    }

res_partner

 _columns = {
        'courses': fields.many2many('res.partner.course.rel', id1='partner_id', id2='partner_course_rel_id', string='Courses'),
    }

我遇到的问题是:

  • 在合作伙伴表单中,当我点击时添加新记录 结果列表,我必须选择合作伙伴(这是一个nosense, 因为它必须是当前的一个。)。
  • 结果列表只会显示一列(合作伙伴) 喜欢展示两个(课程日期)。

有人可以帮助我一点吗?我正在尝试几件事,但我无法管理我需要的东西。

2 个答案:

答案 0 :(得分:3)

删除模型 res.partner.course.rel 并创建模型 res.partner.course 。在这个模型中将获得有关该课程的所有信息。

res_partner_course(.py)

_columns = {
        'name': fields.char('Name', size=128, required=True),
        'date': fields.date('Joining date'),
        etc...
}

当您执行此操作时,表格 res.partner.course.rel 将自动创建(始终只有两个ID字段):

res_partner(.py)

_columns = {
        'courses_ids': fields.many2many('res.partner.course', 'res.partner.course.rel', 'partner_id', 'course_id', 'Courses', ondelete="cascade", help="Courses associated with the partner'),
}

要以合作伙伴的形式显示此关系,您可以执行以下操作:

res_partner(.xml)

<field name="courses_ids" nolabel="1">
    <tree string="Courses" editable="bottom">
        <field name="name"/>
        <field name="date"/>
    </tree>
</field>

或更简单:

<field name="courses_ids" nolabel="1"/>

答案 1 :(得分:3)

如果一个课程可以有多个日期(而不仅仅是一个),那么你定义3个表(忘记了很多关系):

partner_course_rel(.py)(你还好)

_columns = {
    'partner_id': fields.many2one('res.partner', 'Partner', ondelete='cascade'),
    'course_id': fields.many2one('training.course', 'Course', ondelete='cascade'),
    'date': fields.date('Joining date'),
}

_sql_constraints = [
    ('rel_unique', 'unique(partner_id, course_id, date)', 'This course already give to this company!!'),
]

training_course(.py)

_columns = {
    'name': fields.char('Name'),
    'partner_rel_ids': fields.one2many('partner_course_rel', 'course_id'),
}

res_partner(.py)

_columns = {
    'course_rel_ids': fields.one2many('partner_course_rel', 'partner_id'),
}

在观点中:

training_course(.xml)

<field name="partner_rel_ids" nolabel="1">
    <tree string="Partners" editable="bottom">
        <field name="date"/>
        <field name="partner_id"/>
    </tree>
</field>

res_partner(.xml)

<field name="course_rel_ids" nolabel="1">
    <tree string="Courses" editable="bottom">
        <field name="date"/>
        <field name="course_id"/>
    </tree>
</field>

我认为这可以解决您的问题(如果一个课程可以有多个日期)。