2012-03-13 9 views
1

に私は、Webアプリケーションのためのweb2pyの使用を開始し、次の最小限の例のように私のDB-テーブルのデータの1のページ分割のリストを表示するためにSQLFORM.grid(...)を使用しようとしています。)(sqlform.gridの列出力を変更web2pyの

grid=SQLFORM.grid(query, 
    links=links, 
    fields=[db.example.date,db.example.foo, db.example.bar]) 

db.example.dateフィールドは、UTCでのPythonのdatetime.datetimeオブジェクトが含まれています。現時点では、それはちょうどそう簡単に表示されます。しかし、私はローカルタイムゾーンを設定し、「2時間前に」のようなものを持っているために、出力文字列を変更することができる方法で、実際の出力についてのより多くのコントロールを持っていると思います。別の質問で見られるように

[0]私は、新しい列を挿入するためにlinksを使用することができます。残念ながら、私はこのように挿入したフィールドで行をソートすることはできません。また、実際には最初の列を置き換えるのではなく、右に挿入します。それは解決策ではないようです。

最後に、db.example.dateの出力方法を制御するにはどうすればよいですか?

[0] Calculated Fields in web2py sqlgrid

答えて

4

あなたのモデルでテーブルを定義するときに、あなたの目標を達成することができます。あなたはdefine_tableで使用されるフィールドコンストラクタで表すパラメータはSQLFORM.gridによって認識されます。たとえば、月の名前で日付を印刷する場合は、モデルに次のように入力します。

Field('a_date', type='date', represent=lambda x, row: x.strftime("%B %d, %Y")), 

あなたの機能は現地時間に変換することもできます。

0

あなたは、ヒト化、文字列の日時乾燥形式を変更し、自分フィールド()記述子の表すパラメータでそれを呼び出すためにprettydateを使用する必要があります。たとえば、次の日付は、常にこの中で表現しているしたくない場合は、db.example.dateのいずれかの表示がSQLFORM.grid

0

を含め、ヒト化表示される方法

from gluon.tools import prettydate 
db.example.date.represent = lambda v,r: prettydate(r.date) 

David Nehmeの解答通りにグリッドを作成する直前に、コントローラのdb.table.field.representを設定することができます。

db.example.date.represent = lambda value, row: value.strftime("%B %d, %Y") 

が続きます。

grid = SQLFORM.grid(query,.... 

私はテーブルを結合するときにこれを頻繁に使用します。 、それは、より具体的でなければならないので、それが壊れるモデルファイルから表しrow.table.fieldでrow.fieldがある場合。

関連する問題