2016-08-11 4 views
0

テーブルCテーブルABを基準に2つのフィールドを有している(AB & C)以下の3つのテーブルを考えます。IDをWeb2pyの参照フィールドに変換するには?

モデル:

db.define_table('A', 
Field('A1', 'string', required =True), 
Field('A2', 'string', required =True), 
Field('A3', 'string', required =True), 
format=lambda r: '%s, %s' % (r.A.A1, r.A.A2)) 

db.define_table('B', 
Field('B1', 'string', required=True), 
Field('B2', 'string', required=True), 
Field('B3', 'string', required=True), 
format=lambda r: '%s, %s' % (r.B.B1, r.B.B2)) 

db.define_table('C', 
Field('C1', db.A), 
Field('C2', db.B), 
Field('C3', 'string', required=True), 
format=lambda r: '%s, %s - %s' % (r.C.C1, r.C.C2)) 

コントローラ:Iが表Cの3つのフィールドを表示下記の対応を考慮して

def C_view(): 
    if request.args(0) is None: 
     rows = db(db.C).select(orderby=db.C.C1|db.C.C2) 
    else: 
     letter = request.args(0) 
     rows = db(db.C.C1.startswith(letter)).select(orderby=db.C.C1|db.C.C2) 
    return locals() 

:このセットアップを

... 
{{ for x in rows:}} 
    <tr> 
     <td>{{=x.C1}}</td> 
     <td>{{=x.C2}}</td> 
     <td>{{=x.C3}}</td> 
    </tr> 
{{pass}} 
... 

を、ビューディスプレイCC2の外国人ID。モデル、コントローラ、および/またはビューを変更してIDの代わりに対応する参照フィールドを表示する必要はありますか?つまり、 はC1、表示はr.A.A1, r.A.A2C2r.B.B1, r.B.B2と表示されます。

ありがとうございます。

答えて

0

format: Record representationを正しく使用し、render()を使用してIDをそれぞれの表現に変換する必要があります。

あなたのモデルは次のようになります。

db.define_table('A', 
       Field('A1', 'string', required=True), 
       Field('A2', 'string', required=True), 
       Field('A3', 'string', required=True), 
       format='%(A1)s, %(A2)s') 

db.define_table('B', 
       Field('B1', 'string', required=True), 
       Field('B2', 'string', required=True), 
       Field('B3', 'string', required=True), 
       format='%(B1)s, %(B2)s') 

db.define_table('C', 
       Field('C1', db.A), 
       Field('C2', db.B), 
       Field('C3', 'string', required=True)) 

そして、更新制御部とrender()を使用します。 render()はジェネレータを返し、すべての行を反復処理します。

def C_view(): 
    if request.args(0) is None: 
     rows = db(db.C).select(orderby=db.C.C1|db.C.C2).render() 
    else: 
     letter = request.args(0) 
     rows = db(db.C.C1.startswith(letter)).select(orderby=db.C.C1|db.C.C2).render() 
    return locals() 

参考:

Rendering rows using represent

Format: Record representation

0

参照フィールドを定義するためのweb2pyの構文は私の知る限り、以下の通りです:

Field('C1', 'reference A'), 
Field('C2', 'reference B'), 

次に、あなたのビューで、x.C1はそうAテーブルから対象になります

<td>{{=x.C1.A1}}, {{=x.C1.A2}}, {{=x.C1.A3}}</td> 
<td>{{=x.C2.B1}}, {{=x.C2.B2}}, {{=x.C2.B3}}</td> 

希望すると助かります!

関連する問題