如何在web2py表中设置默认orderby?

时间:2015-01-30 15:05:07

标签: python forms web2py

虽然我认为这是一项简单的任务,但在使用SQLFORM时我无法找到使其正常工作的方法。让我们说我有这个结构作为例子:

db.define_table('month',
    Field('name', 'string'),
    format='%(nombre)s'
)

db.define_table('foo'
    Field('bar', 'string'),
    Field('month', db.month), # I want to sort this by ID
    format='%(bar)s'
)

db.month.update_or_insert(id=1, nombre='January')
db.month.update_or_insert(id=2, nombre='Frebruary')
# ...
db.month.update_or_insert(id=12, nombre='December')

在视图中:

def example():
    form = SQLFORM(db.foo).process()
    if form.accepted:
        redirect(URL('default', 'foo'))
    return dict(form=form)

form按字母顺序对月份进行排序,这不是期望行为,我想显示按ID排序的月份。有没有办法在表格中设置默认顺序?

db.month.orderby = db.month.id # Not working
db.month._orderby = db.month.id # Not working

1 个答案:

答案 0 :(得分:3)

db.foo.month字段是一个引用字段,默认情况下,它会获得IS_IN_DB验证程序,从而导致在表单中生成选择窗口小部件。选择小部件包括"月"的ID。表记录为值,但由于"格式"它在下拉列表中显示月份名称。 db.month表的属性。默认情况下,下拉列表中的项目最终按格式字符串中指定的字段排序(在本例中为月份名称)。要更改它,您可以手动定义验证器并指定" orderby"参数:

db.foo.month.requires = IS_IN_DB(db, 'month.id', db.month._format,
                                 orderby=db.month.id)