Thank you Calvin; I had to do the following changes, changing 'items.sort(...)' to 'sorted(items,...)', but the drop down displays the item_typess in natural sort order:
import re def natural_key(string_): return [int(s) if s.isdigit() else s for s in re.split(r'(\d+)', string_)] db.define_table('item_type', Field('name'), Field('description'), format='%(name)s' ) db.define_table('item', Field('name'), Field('description'), Field('item_type'), format='%(name)s' ) db.item.item_type.requires = IS_EMPTY_OR(IS_IN_DB(db, db.item_type, '%(name)s', zero=None)) if db(db.item_type).isempty(): db.item_type.insert(name='Type1') db.item_type.insert(name='Type2') db.item_type.insert(name='Type3') db.item_type.insert(name='Type10') db.item_type.insert(name='Type20') db.item_type.insert(name='Type30') db.item_type.insert(name='Type99') items = db(db.item_type.id > 0).select() sorted_items= sorted(items, key=lambda x: natural_key(x.name)) db.item.item_type.widget = lambda f, v: SELECT(['']+[OPTION(i.name, _value=i.id) for i in sorted_items], _name=f.name, _id="%s_%s" % (f._tablename, f.name), _value=v, value=v) Also note the addition of [''] and IS_EMPTY_OR(...); this will also handle the default of not-set/None item_types! Thanks again; -rppowell -- --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.