I want to be able to flag to the user that certain input fields are
'Required' (even before they hit 'Submit' & see the form failing to
validate)

To do this I decided to try & create a widget that would append to the
normal INPUT box a SPAN(_class="req").
I can then use CSS/JS to populate that span with a red asterisk (but
keep it cutomisable by designers, if they wish).

I followed the instructions here:
http://mdp.cti.depaul.edu/AlterEgo/default/show/170

Copying the default from sqlhtml.py +125, I added this widget to my
customised T2 class:
def input_required_widget(field,value):
    items=[DIV(INPUT(_type='text',
_id=field_id,_class=field.type,_name=fieldname,value=str
(default),requires=field.requires),SPAN(_class='req'))]
    return DIV(*items)

I then added this to my model:
db.cr_shelter.name.widget=t2.input_required_widget

This gives the following error:
Traceback (most recent call last):
  File "C:\Bin\web2py\gluon\restricted.py", line 62, in restricted
    exec ccode in environment
  File "C:\Bin\web2py\applications\sahana/controllers/cr.py", line 78,
in <module>
  File "C:\Bin\web2py\gluon\globals.py", line 55, in <lambda>
    self._caller=lambda f: f()
  File "C:\Bin\web2py\applications\sahana/controllers/cr.py", line 40,
in add_shelter
    form=t2.create(db.cr_shelter)
  File "C:\Bin\web2py\applications\sahana\modules\t2.py", line 414, in
create
    showid=False,col3=col3,_class='t2-create')
  File "C:\Bin\web2py\gluon\sqlhtml.py", line 89, in __init__
    inp=field.widget(field,default)
TypeError: input_required_widget() takes exactly 2 arguments (3 given)


I searched around to see if there were other docs & found this:
http://groups.google.com/group/web2py/browse_thread/thread/961d4303a7549241/a9d19abdfa4b6a07

I tried bypassing the module & just put in a simple:
db.cr_shelter.name.widget=lambda self,value: DIV(INPUT
(_type='text'),SPAN(_class='req'))

This displays correctly, but doesn't allow entered data to get stored
in the db, presumably because the id isn't set on the field.

I tried to add all the fields in:
db.cr_shelter.name.widget=lambda self,value: DIV(INPUT(_type='text',
_id=field_id,_class=field.type,_name=fieldname,value=str
(default),requires=field.requires),SPAN(_class='req'))

But then I get a scope problem:
Traceback (most recent call last):
  File "C:\Bin\web2py\gluon\restricted.py", line 62, in restricted
    exec ccode in environment
  File "C:\Bin\web2py\applications\sahana/controllers/cr.py", line 78,
in <module>
  File "C:\Bin\web2py\gluon\globals.py", line 55, in <lambda>
    self._caller=lambda f: f()
  File "C:\Bin\web2py\applications\sahana/controllers/cr.py", line 40,
in add_shelter
    form=t2.create(db.cr_shelter)
  File "C:\Bin\web2py\applications\sahana\modules\t2.py", line 414, in
create
    showid=False,col3=col3,_class='t2-create')
  File "C:\Bin\web2py\gluon\sqlhtml.py", line 89, in __init__
    inp=field.widget(field,default)
  File "C:\Bin\web2py\applications\sahana/models/db.py", line 517, in
<lambda>
    db.cr_shelter.name.widget=lambda self,value: DIV(INPUT
(_type='text', _id=field_id,_class=field.type,_name=fieldname,value=str
(default),requires=field.requires),SPAN(_class='req'))
NameError: global name 'field_id' is not defined


I changed my model to:
db.cr_shelter.name.widget=lambda self,value: t2.input_required_widget

This gives no traceback, but instead of an INPUT box, I get the
following:
&lt;bound method T2SAHANA.input_required_widget of
&lt;applications.sahana.modules.sahana.T2SAHANA instance at
0x04291698&gt;&gt;

Trying:
db.cr_shelter.name.widget=lambda self,value: t2.input_required_widget
('name')

I'm back to the scope issue:
Traceback (most recent call last):
  File "C:\Bin\web2py\gluon\restricted.py", line 62, in restricted
    exec ccode in environment
  File "C:\Bin\web2py\applications\sahana/controllers/cr.py", line 78,
in <module>
  File "C:\Bin\web2py\gluon\globals.py", line 55, in <lambda>
    self._caller=lambda f: f()
  File "C:\Bin\web2py\applications\sahana/controllers/cr.py", line 40,
in add_shelter
    form=t2.create(db.cr_shelter)
  File "C:\Bin\web2py\applications\sahana\modules\t2.py", line 414, in
create
    showid=False,col3=col3,_class='t2-create')
  File "C:\Bin\web2py\gluon\sqlhtml.py", line 89, in __init__
    inp=field.widget(field,default)
  File "C:\Bin\web2py\applications\sahana/models/db.py", line 520, in
<lambda>
    db.cr_shelter.name.widget=lambda self,value:
t2.input_required_widget('name')
  File "C:\Bin\web2py\applications\sahana\modules\sahana.py", line
163, in input_required_widget
NameError: global name 'field_id' is not defined

This also happens even if I remove that global from my widget def:
items=[DIV(INPUT
(_type='text',_class=field.type,_name=field.name,value=value,requires=field.requires),SPAN
(_class='req'))]

I'm not sure why there's a scope issue since my custom T2 has this
line:
from gluon.sqlhtml import *



Searching some more:
http://groups.google.com/group/web2py/browse_thread/thread/8f4ac3eb42b599f2/692bef480d3d5df9

I tried this:
db.cr_shelter.name.widget=lambda a,b: t2.input_required_widget(a,b,
['name'])
No joy:
TypeError: input_required_widget() takes exactly 2 arguments (4 given)

I see that this widget has 3 arguments in it's def: (self,value,tags=
[])

Since we only have 2, I tried:
db.cr_shelter.name.widget=lambda self,value: t2.input_required_widget
(self,value)
No joy:
TypeError: input_required_widget() takes exactly 2 arguments (3 given)


Going back to trying to fix the scope, I tried having this in the
widget def:
_id=gluon.sqlhtml.field_id
No joy:
NameError: global name 'field_id' is not defined

Trying to see how T2's widgets deal with this I tried adding this to
the widget def:
field_id=self._tablename+'_'+self.name
No joy:
NameError: global name 'field_id' is not defined


I really need a helping hand here ;)

Many thanks,
Fran.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to