在 web2py appadmin 的下拉列表中将外部表呈现为字符串
Rendering the foreign tables of foreign tables as strings in a pulldown in web2py appadmin
跟进 在 web2py 中将外键呈现为下拉菜单
应用管理员,
我希望能够将引用的引用呈现为
下拉列表中的字符串。
换句话说,上一个问题处理的是如何渲染
table 的外键作为下拉列表。这个问题涉及
外键的外键。
我现在可以呈现 table 的外键
wallet_asset
:
db.define_table('wallet_asset',
Field('wallet_id', 'reference wallet'),
Field('asset_id', 'reference asset'),
)
通过像这样定义引用的 tables:
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'
)
但现在我想要一个 table 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
根据
tables wallet and
asset` 中外键的表示,
类似于:
asset.name is held in 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'
)
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 有帮助。
跟进 在 web2py 中将外键呈现为下拉菜单 应用管理员, 我希望能够将引用的引用呈现为 下拉列表中的字符串。
换句话说,上一个问题处理的是如何渲染 table 的外键作为下拉列表。这个问题涉及 外键的外键。
我现在可以呈现 table 的外键
wallet_asset
:
db.define_table('wallet_asset',
Field('wallet_id', 'reference wallet'),
Field('asset_id', 'reference asset'),
)
通过像这样定义引用的 tables:
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'
)
但现在我想要一个 table 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
根据
tables wallet and
asset` 中外键的表示,
类似于:
asset.name is held in 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'
)
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 有帮助。