在Web2py中,您可以将lambda分配给数据库Field以将其表示为文本: Field('duetime', 'time', represent=lambda t,r: t.strftime("%H:%M") if t else '')
在生成SQLForm时使用此类描述,您将获得良好的时间表示(不会显示秒数) .
但是当我想在纯HTML视图中使用数据表示时,我只获得原始数据: for r in rows: print "Repr: %s Str: %s" % (r.duetime.repr(),r.duetime.str()) Repr: datetime.time(16, 15) Str: 16:15:00 Repr: None Str: None
所以看起来只有SQLForm在内部生成字段表示 . 如何获取包含数据表示而不是原始数据的查询结果集(行)?
2 回答
您可以使用
Rows.render
方法 . 对于单个记录:为了提高效率,您可以限制“代表”函数将应用于哪些字段:
如果没有将索引作为
.render()
的第一个参数传递,它将返回一个生成器,允许您遍历所有行:如果要循环遍历行的子集,请创建子集并在子集上调用
.render()
:book中的详细信息 .
好吧,我写了一个小函数,它将Rows和Table作为参数并返回字典列表,其中键是字段,值是它们的表示(几乎像行):
def get_rows_representation(rows,table): return [{f: table[f].represent(r[f],r) if table[f].represent else r[f] for f in r.as_dict()} for r in rows]
但也许有更好的本地方式来直接从Rows获取Field表示?