使用原始 SQL 查询 Odoo 多对多字段
Querying an Odoo many-to-many field using raw SQL
我想在报表中显示多对多字段。
目前我的模型如下:
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 语句显示它们。
在我下面的示例中,我认为 teachers
和 courses
具有多对多关系:教师可以教授多门课程,课程也可以由多位教师教授。
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),您可以查询联结点 table(或 交叉引用 table) teacher_course_rel
从每个 table.
中检索所需的列
例如,下面的查询检索所有教授物理课程的教师姓名:
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'
请注意,只有在满足条件时(即两个 INNER JOIN
条件和 WHERE
条件)。出于您的目的,您可能希望使用 different type of join,具体取决于您希望从 table 中检索的信息。
我想在报表中显示多对多字段。
目前我的模型如下:
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 语句显示它们。
在我下面的示例中,我认为 teachers
和 courses
具有多对多关系:教师可以教授多门课程,课程也可以由多位教师教授。
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),您可以查询联结点 table(或 交叉引用 table) teacher_course_rel
从每个 table.
例如,下面的查询检索所有教授物理课程的教师姓名:
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'
请注意,只有在满足条件时(即两个 INNER JOIN
条件和 WHERE
条件)。出于您的目的,您可能希望使用 different type of join,具体取决于您希望从 table 中检索的信息。