简介:
我想看到这样的东西:
Regular Loan Loan
Appliances Loan Loan
Monthly Dues Contribution
HELP Contribution
...但是我却得到了这个:
Regular Loan <Set Loan>
Appliances Loan <Set Loan>
Monthly Dues <Set Contribution>
HELP <Set Contribution>
如何将<Set Loan>
和<Set Contribution>
设置为Loan
和Contribution
?
#controller
def get_service_name(type_id=int):
type_item = db(db.service_types.id==type_id).select()
return type_item[0].type_name
def list_services():
rows = db(db.services).select()
types = []
for s in rows:
types.append(db(get_service_name(s.service_type)))
return locals()
#view
{{extend 'layout.html'}}
<h1>
Services
</h1>
{{i = -1}}
{{for service in rows:}}
{{i = i +1}}
<tr><span>{{=service.service_name}}</span><span>{{=types[i]}}</span></tr><br>
{{pass}}
编辑1
#db.py
db.define_table('service_types',
Field('type_name', requires=[IS_NOT_EMPTY(), IS_SLUG()]),
format='%(type_name)s',
)
db.define_table('services',
Field('service_name',requires=[IS_NOT_EMPTY(),IS_NOT_IN_DB(db,'services.service_name')]),
Field('service_type','reference service_types',requires=IS_IN_DB(db,db.service_types.id,
'%(type_name)s',
error_message='not in table',
zero=None))
)
答案 0 :(得分:0)
db(query)
返回一个DAL Set
对象。我想相反,您想要:
types.append(get_service_name(s.service_type))
但是,实际上,这比这更简单,因为您可以使用recursive selects从service_types
表中自动选择DAL(即不需要get_service_name
函数)。
def list_services():
rows = db(db.services).select()
return dict(rows=rows)
在视图中:
{{for service in rows:}}
<tr>
<span>{{=service.service_name}}</span>
<span>{{=service.service_type.type_name}}</span>
</tr><br>
{{pass}}
请注意,这种方法(以及您的原始代码)效率不高,因为它会为每个记录选择一个额外的数据库。如果记录很多,您可能要加入一个连接:
def list_services():
rows = db(db.services.service_type == db.service_types.id).select(
db.services.service_name, db.service_types.type_name)
return dict(rows=rows)
然后在视图中:
{{for row in rows:}}
<tr>
<span>{{=row.services.service_name}}</span>
<span>{{=row.service_types.type_name}}</span>
</tr><br>
{{pass}}
上述方法只需要一个查询。