我第一次使用web2py进行项目。我用以下方式制作了一个字段
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>
我面临的问题是,在显示来自&#34; my_years&#34;我在几年内看到了case_years的主键ID,而不是看到了Value(即case_years.year)。
请帮助..
答案 0 :(得分:2)
如果删除显式requires
参数,那么您将获得与您定义的默认requires
相同的默认值represent
,此外,您将获得将显示的默认Field('case_year', db.case_years, required=True)
属性年份而不是SQLTABLE,SQLFORM.grid中的id,以及读取和更新SQLFORM的。
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))
属性:
represent
另请注意,您的代码行末尾不需要分号。
更新(基于提供的新代码):
在您的视图中,字段的{{=case.case_year}}
属性将不起作用,因为您没有使用SQLFORM或SQLTABLE,只是显示单个值:
{{=db.case_years(case.case_year).year}}
case.case_year是一个id值,所以这将是上面显示的内容。如果要显示db.case_years表中的关联年份,则需要执行以下操作:
{{=case.case_year.year}}
您也可以进行递归选择:
{{1}}
等同于上述。请注意,这两种方法都会导致每种情况都有额外的数据库查询,因此这样效率会有些低下。相反,您可以对案例的初始查询进行连接,并在case_years表中包含“year”字段(请参阅http://web2py.com/books/default/chapter/29/06#Inner-joins)。