跟进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
,然后引用wallet
和asset
。
大概最终解决方案看起来像这样:
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'
)
答案 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.name
和r.wallet_id.name
涉及recursive selects,因此当为db.user_wallet_asset.wallet_asset_id
字段生成下拉列表时,下拉菜单中的每个项目都会有两个数据库选择
有关详细信息,您可能会发现this answer有帮助。