当使用 SQLFORM.grid adding/editing 个条目时,对 table 参考下拉列表进行排序
Sorting table reference dropdown when adding/editing entries using SQLFORM.grid
这就是我在 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')
在我的控制器中,对于 main_table 我有一个简单的操作:
def main_table():
grid = SQLFORM.grid(db.main_table, maxtextlength=100)
return dict(grid=grid)
这很好用并提供了我希望的功能(能够轻松地添加、编辑、查看和删除数据库中的条目),但我 运行 遇到的问题当 adding/editing 新条目出现在 main_table
.
时
当我单击 +Add Record
按钮并转到用于向 main_table
添加条目的表单时,它会显示一个下拉列表。问题是下拉菜单的选择是按 other_table
中条目的 ID 排序的,而我更喜欢根据 [=18] 定义中指定的格式按字母顺序对项目进行排序=].
有没有办法让它按我想要的字母顺序排序?
引用字段获得默认的 IS_IN_DB
验证器,其 label
参数基于引用的 table 的 format
属性(label
参数是用于在表单的 <select>
小部件中生成标签)。当 format
属性是一个字符串时,web2py 检查字符串,提取字段名称,并使用它们为数据库查询构建一个 orderby
参数(这导致记录根据生成的排序标签)。但是,当 format
属性是一个函数时,如本例,这不起作用。
相反,您可以手动指定 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)
这就是我在 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')
在我的控制器中,对于 main_table 我有一个简单的操作:
def main_table():
grid = SQLFORM.grid(db.main_table, maxtextlength=100)
return dict(grid=grid)
这很好用并提供了我希望的功能(能够轻松地添加、编辑、查看和删除数据库中的条目),但我 运行 遇到的问题当 adding/editing 新条目出现在 main_table
.
当我单击 +Add Record
按钮并转到用于向 main_table
添加条目的表单时,它会显示一个下拉列表。问题是下拉菜单的选择是按 other_table
中条目的 ID 排序的,而我更喜欢根据 [=18] 定义中指定的格式按字母顺序对项目进行排序=].
有没有办法让它按我想要的字母顺序排序?
引用字段获得默认的 IS_IN_DB
验证器,其 label
参数基于引用的 table 的 format
属性(label
参数是用于在表单的 <select>
小部件中生成标签)。当 format
属性是一个字符串时,web2py 检查字符串,提取字段名称,并使用它们为数据库查询构建一个 orderby
参数(这导致记录根据生成的排序标签)。但是,当 format
属性是一个函数时,如本例,这不起作用。
相反,您可以手动指定 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)