2015-04-04 75 views
1

我想在報表中顯示多對多字段。使用原始SQL查詢Odoo多對多字段

目前我的模型如下:

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

在我下面的例子中,我正在考慮teacherscourses有一個多對多的關係:教師可以教多個課程,課程可以由多位教師教授。

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從每個表中檢索需要的列。

例如,下面的查詢檢索所有的老師的名字教學的物理課程

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,具體取決於您希望從兩張表格中檢索的信息。