如何加入3个表并输出所有三个一起加入web2py?

时间:2013-12-20 05:40:43

标签: python web2py

模型:

# coding: utf8
db.define_table('dept',
                Field('name',unique=True,label='Department Name'),
                format='%(name)s')

db.define_table('course',
                Field('dept_id','reference dept'),
                Field('name',unique=True,label='Course Name'),
            format='%(name)s')

db.define_table('files',
                Field('course_id', 'reference course'),
                Field('documentx','upload'))

控制器:

def show_doc():
    rows = db( db.course.id == db.files.course_id , db.dept.id==db.course.dept_id).select()
    return rows

我要做的是将部门表“dept”与“course”表和“course”表与“files”表一起加入。所以在输出时会显示一个包含部门的表格,其中包含课程和文件。解决方案不起作用。它只在“课程”表和“文件”表之间创建一个连接。

2 个答案:

答案 0 :(得分:4)

正如book所述,它应该是:

db((db.course.id == db.files.course_id) & (db.dept.id==db.course.dept_id))

答案 1 :(得分:1)

在您的控制器中,您只需选择所有文件:

def show_doc():
    rows = db(db.files.documentx).select()
    return dict(rows=rows)

然后,在您的视图“ show_doc.html ”中,您可以访问链接的字段:

{{extend 'layout.html'}}
{{for row in rows:}}
    <div>Department : {{=row.course_id.dept_id.name}} Course : {{=row.course_id.name}}</div>
    {{if row.documentx:}}
        <div><a href={{=URL('default', 'download', args=row.documentx)}}>Download file</a></div>
    {{pass}}
    <hr>
{{pass}}