2012-12-01 66 views
0

我第一次使用web2py進行項目。我通過以下方式Web2py顯示外鍵ID

db.define_table('my_years',Field('case_year',db.case_years,required=True,requires = IS_IN_DB(db, 'case_years.id', '%(year)s'))); 

此字段指的是具有千年的列表中的另一臺做了一個場,該表的定義如下:

db.define_table('case_years',Field('year'),format = '%(year)s') ; 

然後我顯示在my_years一個看法。

<table id="case_list"> 
    <thead> 
     <tr> 
      <th>Number</th> 
      <th>Year</th> 
      <th>Action</th> 
     </tr> 
    </thead> 
    <tbody> 
      {{ for case in cases: }} 
      <tr> 
       <td>{{=case.case_number}}</td> 
       <td>{{=case.case_year}}</td> 
       <td><a href= "{{=URL(r=request, f='edit', args=case.id)}}"> Edit Case </a></td> 
      </tr> 
      {{pass}} 
    </tbody> 
</table> 

我現在面臨的問題是,雖然顯示來自「my_years」今年我看到的case_years的主鍵ID,而不是看在多年的值(即case_years.year)。

請幫助..

回答

1

如果刪除了明確的requires說法,那麼你將獲得一個默認requires那是你定義它一樣的,再加上你會得到一個默認represent屬性,將顯示年份,而不是SQLTABLE中的id,SQLFORM.grid,並讀取和更新SQLFORM。

Field('case_year', db.case_years, required=True) 

另外,你可以明確地定義represent屬性:

Field('case_year', db.case_years, required=True, 
     requires=IS_IN_DB(db, 'case_years.id', '%(year)s'), 
     represent=lambda id, r: db.case_years(id).year)) 

另外請注意,你並不需要在你的代碼行的結束分號。

UPDATE(基於提供了新的代碼):

在您看來,該領域的represent屬性將沒有任何效果,因爲你不使用SQLFORM或SQLTABLE而只是顯示一個值:

{{=case.case_year}} 

case.case_year是一個id值,所以這就是上面顯示的內容。如果你想從db.case_years表顯示相關的一年裏,你需要做的:

{{=db.case_years(case.case_year).year}} 

你也可以做一個遞歸選擇:

{{=case.case_year.year}} 

這相當於上面。請注意,這兩種方法都會爲每個案例產生一個額外的數據庫查詢,所以這會有些低效。相反,您可以對聯接案例進行初始查詢,並在case_years表中包含「年」字段(請參見http://web2py.com/books/default/chapter/29/06#Inner-joins)。

+0

我做了更改,但該視圖仍顯示db.case_years的主鍵ID而不是db.case_years.year。 – tejzpr

+0

你究竟在視圖中展示了什麼?請顯示你的代碼。 – Anthony

+0

我已將視圖部分添加到原始問題。初學者: – tejzpr