如何为多对多关系(OpenERP7)添加和显示一些属性?

for*_*vas 2 python many-to-many openerp openerp-7

这是一个棘手的问题。

我试图将一些字段添加到many2many表中。我在谷歌上搜索,发现必须创建一个中间表来存储这些字段。但这不是很好。

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

因此,在合作伙伴表格中,我必须查看他加入的课程列表,以及每个人的日期。

我的代码是:

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'),
    }
Run Code Online (Sandbox Code Playgroud)

res_partner

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

我遇到的问题是:

  • 在伙伴表单中,当我单击结果列表中的添加新记录时,我必须选择伙伴(这是无意义的,因为它必须是当前的伙伴)。
  • 当我想显示两个列(课程日期)时,结果列表仅显示一列(伙伴)。

有人可以帮我一下吗?我正在尝试几种方法,但是我无法满足需要。

Jos*_*mos 5

如果一门课程可以有多个日期(而不仅仅是一个日期),那么您可以定义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!!'),
]
Run Code Online (Sandbox Code Playgroud)

training_course(.py)

_columns = {
    'name': fields.char('Name'),
    'partner_rel_ids': fields.one2many('partner_course_rel', 'course_id'),
}
Run Code Online (Sandbox Code Playgroud)

res_partner(.py)

_columns = {
    'course_rel_ids': fields.one2many('partner_course_rel', 'partner_id'),
}
Run Code Online (Sandbox Code Playgroud)

并在视图中:

training_course(.xml)

<field name="partner_rel_ids" nolabel="1">
    <tree string="Partners" editable="bottom">
        <field name="date"/>
        <field name="partner_id"/>
    </tree>
</field>
Run Code Online (Sandbox Code Playgroud)

res_partner(.xml)

<field name="course_rel_ids" nolabel="1">
    <tree string="Courses" editable="bottom">
        <field name="date"/>
        <field name="course_id"/>
    </tree>
</field>
Run Code Online (Sandbox Code Playgroud)

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