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

时间:2015-07-30 17:46:28

标签: python mysql web2py

这就是我在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)

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

当我点击+Add Record按钮并转到表单以向main_table添加条目时,会显示一个下拉列表。问题是下拉菜单的选择按other_table中条目的ID排序,而我更喜欢根据{{1的定义中指定的格式按字母顺序排序项目}}

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

1 个答案:

答案 0 :(得分:1)

引用字段获取默认IS_IN_DB验证器,其label参数基于引用表的format属性(label参数用于在{中生成标签表格中的{1}}窗口小部件。当<select>属性是字符串时,web2py会检查字符串,提取字段名称,并使用它们为数据库查询构建format参数(这会导致记录根据生成的顺序排序)标签)。但是,当orderby属性是一个函数时,就像在这种情况下,这不起作用。

相反,您可以手动指定format验证程序并设置IS_IN_DB。这告诉它通过标签明确地对选项进行排序。

sort=True