Followed Anthony's idea and now everything works!
Thanks to everybody who helped with this and specially Anthony for the final advice. - Kimmo On Mar 7, 5:05 pm, Anthony <abasta...@gmail.com> wrote: > Maybe you could monkey patch SQLFORM: > > SQLFORM.widgets.double = my_double_widget > > Technically, that won't change the "widget" attribute of the DAL Field, but > it will cause SQLFORM to use your widget instead of the default > DoubleWidget whenever it encounters a double field that doesn't have an > explicit widget defined. > > Note, in that case, you'll have to define your widget as a class with a > static method called "widget" -- something like (not tested): > > class MyDoubleWidget(object): > @staticmethod > def widget(field, value): > if "e" in value: > if value.endswith(".00"): > value = value[0:len(value)-3] > return INPUT(_name=field.name, > _id="%s_%s" % (field._tablename, field.name), > _class=field.type, > _value=value, > requires=field.requires) > > Anthony > > > > > > > > On Wednesday, March 7, 2012 4:01:38 AM UTC-5, Kimmo wrote: > > > I made a (ugly hack) custom widget for all the Fields that have double > > type. Now E notation and normal double values work perfectly (edit / > > save / viewing). > > How do i set this widget as a default widget for all the Fields that > > have double type in my model? I would rather like to avoid setting > > this to all double Fields manually: > > Field('value', 'double', notnull=True, widget=my_double_widget) > > > def my_double_widget(field, value): > > if "e" in value: > > if value.endswith(".00"): > > value = value[0:len(value)-3] > > #print value > > return INPUT(_name=field.name, > > _id="%s_%s" % (field._tablename, > > field.name), > > _class=field.type, > > _value=value, > > requires=field.requires) > > > - Kimmo > > > On Mar 5, 8:30 am, Anthony <abasta...@gmail.com> wrote: > > > On Monday, March 5, 2012 7:22:05 AM UTC-5, Massimo Di Pierro wrote: > > > > > Actually I think the problem is simply the JS validator. Try comment > > this > > > > line in static/js/web2py.js > > > > > doc.on('keyup', 'input.double, input.decimal', > > > function(){this.value=this.value.reverse().replace(/[^0-9\-\.,]|[\-](?=.)|[ > > \.,](?=[0-9]*[\.,])/g,'').reverse();}); > > > > Note, the above Javascript only has an effect if the class of the input > > > element is "double". By default, SQLFORM adds a "double" class to input > > > elements for fields of type double, but you can override that by > > explicitly > > > specifying an alternate widget for the field (you could create a custom > > > widget, but I think a standard string widget should work in this case). > > So, > > > in your table definition: > > > > db.define_table('mytable', Field('myfield', 'double', > > > widget=SQLFORM.widgets.string.widget)) > > > > That will give the input field a class of "string" instead of "double", > > so > > > the above Javascript will no longer affect it. > > > > Anthony