在web2py appadmin中的下拉列表中将外表的外表作为字符串呈现

时间:2016-10-27 20:14:34

标签: web2py pydal

跟进rendering foreign keys as a pulldown in web2py appadmin, 我希望能够将引用的引用呈现为 pulldowns中的字符串。

换句话说,前一个问题涉及如何渲染 作为下拉列表的外键。这个问题涉及到 外键的外键。

我现在能够呈现表的外键 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`中表示外键, 类似的东西:

  

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'
)

1 个答案:

答案 0 :(得分: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涉及recursive selects,因此当为db.user_wallet_asset.wallet_asset_id字段生成下拉列表时,下拉菜单中的每个项目都会有两个数据库选择

有关详细信息,您可能会发现this answer有帮助。