Can't you just use the "represent" attribute for the custom display (and possibly a custom widget if you need special input as well)? What's wrong with your current code?
Anthony On Thursday, July 17, 2014 9:29:00 AM UTC-4, Eric wrote: > > Hi There, > > Today I needed to use a SQLCustomType to convert a boolean to a string (in > view mode) and the other way around when storing it. > > I used this customtype: > > bool_to_text = SQLCustomType( > type='string', > native='boolean', > encoder=lambda value: SQLFormFilters.store_text_as_boolean(value), > decoder=lambda value: SQLFormFilters.view_boolean_as_text(value) > ) > > And this functions in the class > > @staticmethod > def store_text_as_boolean(value): > if value == 'true': > return 'T' > else: > return 'F' > > @staticmethod > def view_boolean_as_text(value): > if value == 'T': > return 'true' > else: > return 'false' > > I needed to use this check: > value == 'T' > > because it looks like the DAL is always giving back a string in this > specific situation. > > When I use: > value == True > > Web2py crashes with this error: > > AttributeError: 'bool' object has no attribute 'replace' > <http://127.0.0.1:8000/admin/errors/portal#> > > Traceback (most recent call last): > File "/home/eric/Projects/Web2Py/BricksSis/gluon/restricted.py", line 220, > in restricted > exec ccode in environment > File > "/home/eric/Projects/Web2Py/BricksSis/applications/portal/controllers/medication_templates.py", > line 147, in <module> > File "/home/eric/Projects/Web2Py/BricksSis/gluon/globals.py", line 385, in > <lambda> > self._caller = lambda f: f() > File "/home/eric/Projects/Web2Py/BricksSis/gluon/tools.py", line 3287, in f > return action(*a, **b) > File > "/home/eric/Projects/Web2Py/BricksSis/applications/portal/controllers/medication_templates.py", > line 71, in edit > if form.process().accepted: > File "/home/eric/Projects/Web2Py/BricksSis/gluon/html.py", line 2282, in > process > self.validate(**kwargs) > File "/home/eric/Projects/Web2Py/BricksSis/gluon/html.py", line 2219, in > validate > if self.accepts(**kwargs): > File "/home/eric/Projects/Web2Py/BricksSis/gluon/sqlhtml.py", line 1590, in > accepts > self.id_field_name]).update(**fields) > File "/home/eric/Projects/Web2Py/BricksSis/gluon/dal.py", line 10549, in > update > ret = db._adapter.update("%s" % table._tablename,self.query,fields) > File "/home/eric/Projects/Web2Py/BricksSis/gluon/dal.py", line 1612, in > update > sql = self._update(tablename, query, fields) > File "/home/eric/Projects/Web2Py/BricksSis/gluon/dal.py", line 1607, in > _update > for (field, value) in fields]) > File "/home/eric/Projects/Web2Py/BricksSis/gluon/dal.py", line 1552, in > expand > return str(self.represent(expression,field_type)) > File "/home/eric/Projects/Web2Py/BricksSis/gluon/dal.py", line 1978, in > represent > return self.adapt(value) > File "/home/eric/Projects/Web2Py/BricksSis/gluon/dal.py", line 775, in adapt > return "'%s'" % obj.replace("'", "''") > AttributeError: 'bool' object has no attribute 'replace' > > > Oh... I'm using SQLForms in the controller, the view contains a custom > form, I'm printing the field like this: > > {{=form.custom.widget.is_specialite}} > > > -- 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.