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

Reply via email to