如何在 web2py table 中设置默认顺序?
How to set default orderby in a web2py table?
虽然我认为这是一项简单的任务,但在使用 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 排序的月份。有没有办法在 table?
中设置默认顺序
db.month.orderby = db.month.id # Not working
db.month._orderby = db.month.id # Not working
db.foo.month
字段是一个引用字段,默认情况下,它会得到一个 IS_IN_DB
验证器,这会导致在表单中生成 select 小部件。 select 小部件包含 "month" table 记录的 ID 作为值,但由于 [=13= 的 "format" 属性,它会在下拉列表中显示月份名称] table。默认情况下,下拉列表中的项目最终按格式字符串中指定的字段(在本例中为月份名称)排序。要更改它,您可以手动定义验证器并指定 "orderby" 参数:
db.foo.month.requires = IS_IN_DB(db, 'month.id', db.month._format,
orderby=db.month.id)
虽然我认为这是一项简单的任务,但在使用 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 排序的月份。有没有办法在 table?
db.month.orderby = db.month.id # Not working
db.month._orderby = db.month.id # Not working
db.foo.month
字段是一个引用字段,默认情况下,它会得到一个 IS_IN_DB
验证器,这会导致在表单中生成 select 小部件。 select 小部件包含 "month" table 记录的 ID 作为值,但由于 [=13= 的 "format" 属性,它会在下拉列表中显示月份名称] table。默认情况下,下拉列表中的项目最终按格式字符串中指定的字段(在本例中为月份名称)排序。要更改它,您可以手动定义验证器并指定 "orderby" 参数:
db.foo.month.requires = IS_IN_DB(db, 'month.id', db.month._format,
orderby=db.month.id)