gpt4 book ai didi

python - 使用 SQLFORM.grid 添加/编辑条目时对表引用下拉列表进行排序

转载 作者:行者123 更新时间:2023-11-28 23:55:46 25 4
gpt4 key购买 nike

这就是我在 db.py 中定义表的方式:

db.define('other_other_table1',
Field('other_other1_field1', 'string',
length=30, required=True,
format='%(other_other1_field1)s'),
singular='Other Other Stuff 1',
plural='Other Other Stuff 1')


db.define('other_other_table2',
Field('other_other2_field1', 'string',
length=40, required=True,
format='%(other_other2_field1)s'),
singular='Other Other Stuff 2',
plural='Other Other Stuff 2')


db.define_table('other_table',
Field('other_field1',
'reference other_other_table1'),
Field('other_field2', 'double'),
Field('other_field3',
'reference other_other_table2'),
format=lambda r: '%s %s %s' % \
(r.other_field1.other_other1_field1,
str(r.other_field2),
r.other_field3.other_other2_field1),
singular='Other Stuff',
plural='Other Stuff')


db.define_table('main_table',
Field('main_field1',
'reference other_table'),
singular='Stuff',
plural='Stuff')

在我的 Controller 中,对于 main_table 我有一个简单的操作:

def main_table():
grid = SQLFORM.grid(db.main_table, maxtextlength=100)

return dict(grid=grid)

这很好用并提供了我希望的功能(能够轻松地添加、编辑、查看和删除数据库中的条目),但是我在添加/编辑新条目时遇到了问题main_table 中的条目。

当我单击 +Add Record 按钮并转到用于将条目添加到 main_table 的表单时,它会显示一个下拉列表。问题是下拉菜单的选择是按 other_table 中条目的 ID 排序的,而我更喜欢根据定义中指定的格式按字母顺序对项目进行排序其他表

有没有办法让它按我想要的字母顺序排序?

最佳答案

引用字段默认为 IS_IN_DB label 的验证者参数基于 format引用表的属性(label 参数用于在 <select> 表单中的小部件中生成标签)。当 format attribute 是一个字符串,web2py 检查该字符串,提取字段名称,并使用它们构建一个 orderby数据库查询的参数(导致根据生成的标签对记录进行排序)。但是,当 format attribute 是一个函数,因为在这种情况下,这是行不通的。

相反,您可以手动指定 IS_IN_DB验证器并设置 sort=True .这告诉它通过标签明确地排序选项。

db.main_table.main_field1.requires=IS_IN_DB(db, 'other_table.id',
label=db.other_table._format, sort=True)

关于python - 使用 SQLFORM.grid 添加/编辑条目时对表引用下拉列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31730658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com