Does IS_IN_DB(sort=True) not do what you want? If not, it might be a bit simpler to instead override the options() method of IS_IN_DB and just provide an alternative function in place of options_sorter() (or, if you want an alternative options_sorter in all cases, you could just monkey patch it in gluon.validators).
Anthony On Friday, February 10, 2017 at 12:08:58 PM UTC-5, Mirek Zvolský wrote: > > ... or to any other special order. > > For me was creazy that I was not able to sort items (names) in IS_IN_DB > lists alphabetically. > IS_IN_DB has lot of undocumented parameters but I think nothing can help. > > Of course when running from Postgres, you will receive records with proper > locale order. > However with SQLite you need (maybe) a hacked and special compiled SQLite > to have correct order. > Otherwise you start with uppercase ascii, then follow lowercase ascii, and > at the end are accented (non-ascii) characters. Crazy. > > Now I use this hack in my model: > > import locale > locale.setlocale(locale.LC_ALL, 'cs_CZ.UTF-8') > > > class IS_IN_DB_(IS_IN_DB): > def build_set(self): > super(IS_IN_DB_, self).build_set() > records = [(lbl, self.theset[pos]) for pos, lbl in enumerate(self. > labels)] > records.sort(key=lambda x: locale.strxfrm(x[0])) > self.labels = [rec[0] for rec in records] > self.theset = [rec[1] for rec in records] > > > db.define_table('payment', > Field('idauth_user', 'reference auth_user', requires=IS_EMPTY_OR( > IS_IN_DB_(db, db.auth_user.id, '%(nick)s'))), > ...) > > > > Not optimal, but works ! > > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- 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/d/optout.