Hi Anthony,
The code I've posted is working, this is that I define a boolean in the
SQLCustomType as orginial field type, but in the check I need to check
against a string. That's weird (in my opinion). When you define a boolean,
you would expect that you need to check for a boolean in the decoder.
This works:
@staticmethod
def view_boolean_as_text(value):
if value == 'T':
return 'true'
else:
return 'false'
But I would expect that it would work like this:
@staticmethod
def view_boolean_as_text(value):
if value == True:
return 'true'
else:
return 'false'
Since you get a boolean from the db. Thing is that this results in a nice
error...
Op donderdag 17 juli 2014 17:25:30 UTC+2 schreef Anthony:
>
> 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 [email protected].
For more options, visit https://groups.google.com/d/optout.