2013-12-20 66 views
0

型號:如何連接3個表格並將所有三個表格一起輸出到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 

我所試圖做的是加入了部門表「部門」與「課程」表和「課程」表與「文件「表。所以當輸出時顯示一個帶有課程的表格和文件一起。該解決方案不起作用。它僅在「課程」表和「文件」表之間創建連接。

回答

4

book中所述,應該是:

db((db.course.id == db.files.course_id) & (db.dept.id==db.course.dept_id)) 
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}} 
+0

這不是最好的方法,如果有很多記錄,因爲上面的遞歸選擇導致db.files中每個記錄的兩個附加查詢。 – Anthony

+0

你是對的安東尼,感謝您的澄清 – espern

+0

@Loïc我如何輸出文件的名稱而不是文本「下載」

是否存儲爲某個字段的名稱隱藏爲id字段? – shunya

相關問題