1

ここのq&a(およびドキュメント)はformat=、define_table関数への引数の使用について説明しています。少し複雑なケースでそれを機能させるのに問題があります。私は web2py バージョン(1, 99, 7, datetime.datetime(2012, 3, 4, 22, 12, 8), 'stable')と Pythonを使用して2.5.4います。(私はMySQLを使用していますが、それは無関係だと思います。)

私は次のものを持っています:

「独立」(子ではない) テーブルInstitutionおよびPerson. テーブルTeamは の子ですInstitution。テーブルTeam_staffを接続PersonしてTeam一緒に。トリミングされたバージョンは次のとおりです。

db.define_table('Person',
                Field('First_name', 'string', length=60, required=True),
                Field('Last_name', 'string', length=60, required=True),
                ...
                format='%(First_name)s %(Last_name)s')

db.define_table('Institution',
                Field('Institution_name', 'string', length=60, required=True,
                   unique=True),
                format='%(Institution_name)s')

db.define_table('Team',
                Field('Institution', db.Institution),
                Field('Sex', 'string', required=True,
                   requires=IS_IN_SET(['m', 'f'])),
                Field('Level', 'string', required=True),
                ...
                format='%(Institution)s %(Sex)s')

db.define_table('Team_staff',
                Field('Team', db.Team),
                Field('Team_staff_member', db.Person),
                ...
                Field('Team_position', 'string', required=True))

ここまでは順調ですね。を作成するコントローラとSQLFORM(db.Team_staff)、単にフォームを表示するビューがあります。[チーム] ドロップダウンをドロップダウンすると、機関IDが [性別] 値と連結されていることがわかります (たとえば1 f、その1 m下に 、次に2 fなど)。のようInstitutionformat='%(Institution_name)s'、機関 ID ではなく機関名が表示されないのはなぜですか?

4

1 に答える 1

3

「format」属性は、そのようにテーブル間で伝播されません。代わりに、「format」属性をラムダ関数として定義できるはずです。ラムダ関数は、テーブルの行を引数として取ります。

db.define_table('Team', ...,
    format=lambda r: '%s %s' % (db.Institution[r.Institution].Institution_name,
                                r.Sex))
于 2012-06-30T15:05:32.187 に答える