使用原始SQL查询Odoo多对多字段

时间:2015-04-04 22:52:18

标签: sql openerp openerp-7 odoo odoo-8

我想在报告中显示多对多字段。

目前我的模型如下:

from openerp.esv import orm, fields


class myClass(orm.Model):
    _name = 'my.Class' 
    _columns = {
        'teacher_id': fields.many2many('fci.staff','lgna_teacher','ids_lol',
                                       'teacher_ids','Observers'),
    }

我想使用SQL select语句显示它们。

1 个答案:

答案 0 :(得分:1)

在下面的示例中,我认为teacherscourses有多对多的关系:教师可以教授多门课程,课程可以由多位教师教授。< / p>

from openerp.osv import orm, fields

class Teachers(orm.Model):
    _name = 'teachers'

    name = fields.Char() 

class Course(rm.Model):
    _name = 'course'

    title = fields.Char()
    teacher_ids = fields.Many2many('teachers', 'teacher_course_rel', 'course_id',
                                  'teacher_id', string='Teachers')

使用SQL(使用Odoo API或您的DBMS),您可以查询联结表(或交叉引用表teacher_course_rel以从每个列中检索所需的列表

例如,下面的查询检索所有教师&#39;教授物理课程的名字:

SELECT c.title, t.name
FROM teacher AS t
INNER JOIN teacher_course_rel AS tcr
    ON t.id = tcr.teacher_id
INNER JOIN course AS c
    ON tcr.course_id = c.id
WHERE c.title = 'Physics'

请注意,我使用了SQL INNER JOIN,只有在满足条件时才返回两个表中的行(即两个INNER JOIN条件和WHERE条件)。出于您的目的,您可能希望使用different type of join,具体取决于您希望从两个表中检索的信息。