Actually Paolo, I have a custom Validator which contains the formatter
function. It is supplied automatically when I use the validator, so I do
not get a chance to change its calling sequence as you show in the case of
using "represents". Here is the validator class:
class IS_ELAPSED_TIME(object):
def __init__(self,error_message='Must be MM:SS.hh or MMSShh (with no
punctuation)'):
self.error_message=error_message
def __call__(self,value):
try:
if value and value.upper() != 'NT':
res = hms_to_int(value)
else:
res = None
return (res,None)
except:
return (value,self.error_message)
def formatter(self,value):
if value:
rtn = int_to_hms(value)
else:
rtn = 'NT'
return rtn
Since the Field is declared to use this validator, I have no explicit
"formatter=" statement I cannot easily employ your solution. I do not
understand why "None" is not allowed to be formatted in the first place.
-- Joe B.
On Thursday, October 25, 2012 6:07:09 AM UTC-7, Paolo Caruccio wrote:
>
> or better
>
> def format_function (value)
> formatted_value = .....
> return formatted_value
>
> db.tablename.fieldname.represent= lambda value,row: format_function(value)
> if value else "Not Standard Time"
>
>
>
>
> Il giorno giovedì 25 ottobre 2012 13:31:43 UTC+2, Paolo Caruccio ha
> scritto:
>>
>> Did you try:
>>
>> db.tablename.fieldname.represent= lambda value: value if value else 'NT"
>>
>> ?
>> web2py book reference
>> http://web2py.com/books/default/chapter/29/06?search=represent#Record-representation
>>
>>
>> Il giorno giovedì 25 ottobre 2012 03:20:29 UTC+2, Joe Barnhart ha scritto:
>>>
>>> I have an application where I expect "None" items in my database and I
>>> want to format them to "NT". It is an app that uses time standards, and if
>>> there is no standard present I expect a "None" in the database which
>>> translates to a field of "No Time" or "NT".
>>>
>>> The problem is that the current implementation of formatter in the Field
>>> class tests the value for "None" and escapes before the formatter is called.
>>>
>>> I can see why this behavior might be expected in a lot of cases, but it
>>> seems extreme to deny the ability to format "None" into a more pleasing
>>> form for those applications that could benefit from it. Here is the
>>> offending part of formatter (located in gluon/dal.py):
>>>
>>> def formatter(self, value):
>>> requires = self.requires
>>> if value is None or not requires:
>>> return value
>>>
>>> If I change the above to:
>>>
>>> def formatter(self, value):
>>> requires = self.requires
>>> if not requires:
>>> return value
>>>
>>> I get my desired behavior, which is to pass "None" to my formatter which
>>> is implemented as part of a custom Validator object. I realize the code
>>> now has to go "further" for cases where the value is None, but is it really
>>> safe to assume nobody will ever want to "format" None into another string?
>>> Not in my case, at least!
>>>
>>> Joe B.
>>>
>>>
>>>
--