0

将外键呈现为 web2py appadmin 中的下拉列表之后,我希望能够将引用的引用呈现为下拉列表中的字符串。

换句话说,上一个问题涉及如何将表的外键呈现为下拉。这个问题涉及外键的外键。

我现在可以渲染表的外键 wallet_asset

db.define_table('wallet_asset',
    Field('wallet_id', 'reference wallet'),
    Field('asset_id', 'reference asset'),
)

通过像这样定义引用的表:

db.define_table('asset',
    Field('name', unique=True, requires=IS_NOT_EMPTY()),
    Field('description', 'text'),
                format='%(name)s'
)

db.define_table('wallet',
    Field('name', unique=True, requires=IS_NOT_EMPTY()),
    Field('description', type='text'),
    format='%(name)s'
)

但现在我想要一张桌子user_wallet_asset

db.define_table('user_wallet_asset',
    Field('user_id', 'reference auth_user'),
    Field('wallet_asset_id', 'reference wallet_asset'),
    Field('address')
)

当我使用 AppAdmin 输入记录时,我希望该字段 wallet_asset_id在下拉列表中呈现为基于表资产中外键表示的字符串wallet and,例如:

asset.name 保存在 wallet.name 中

这并不简单的原因是user_wallet_asset 引用wallet_asset然后引用walletasset

大概最终的解决方案看起来像这样:

db.define_table('wallet_asset',
    Field('wallet_id', 'reference wallet'),
    Field('asset_id', 'reference asset'),
    format='%(asset_id).name is held in %(wallet_id).name'
)
4

1 回答 1

1

format参数可以采用一个生成您想要的值的函数:

db.define_table('wallet_asset',
    Field('wallet_id', 'reference wallet'),
    Field('asset_id', 'reference asset'),
    format=lambda r: '%s is held in %s' % (r.asset_id.name, r.wallet_id.name))

注意,r.asset_id.namer.wallet_id.name涉及递归选择,因此当为db.user_wallet_asset.wallet_asset_id字段生成下拉列表时,下拉列表中的每个项目都会有两个数据库选择。

有关更多详细信息,您可能会发现此答案很有帮助。

于 2016-10-27T23:28:24.967 回答