2014-09-21 51 views
1

在web2py中你可以分配到的λ數據庫字段來表示它的文字:產生SQLFORM時 Field('duetime', 'time', represent=lambda t,r: t.strftime("%H:%M") if t else '') 有了這樣的描述,你會得到很好的時刻表現(秒將不會顯示)。的web2py:利用現場代表不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方法。對於單個記錄:

rows = db(query).select() 
rendered_row = rows.render(0) # apply "represent" functions to the first row 
print rendered_row.duetime 

爲了提高效率,你可以限制哪個領域「代表」功能將被應用:

rendered_row = rows.render(0, fields=[db.mytable.duetime]) 

如果你沒有通過索引作爲第一個參數.render(),它返回一個生成器,讓您遍歷所有行:

for row in rows.render(): 
    print row.duetime 

如果你想遍歷行的一個子集,創建子集,並調用.render()上子集:

for row in rows[0:10].render(): 
    print row.duetime 

book的詳細信息。

0

好吧,我寫的小函數,它的行和表作爲參數,並返回字典,其中鍵字段和值的表示(幾乎像行)的列表: 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]

但也許有更好的本地方式直接從行中獲取字段表示?

+0

是的,有一個本地方法('Rows.render')。請參閱http://stackoverflow.com/a/25975412/440323。 – Anthony 2014-09-22 13:32:09