Now I understand the problem better. No problem.

widget is always an input widget. Output widgets are called
"represent" and usually much simpler. This will do what you want:

db.location.town_id.represent=lambda id: SPAN(db.town[id].townname)

Massimo


On Jun 10, 9:28 pm, Gary <gary.k.ma...@gmail.com> wrote:
> Massimo,
>
> I was so excited that the 'widget' worked that I failed to notice that
> I have the same problem that I started with - except the code is much
> cleaner.  :-)
>
> When the crud read is executed, the valued returned is the value in
> the table.  While this is fine for most fields, when the field is
> defined as an 'id' to another table, for example:
>
> db.location.town_id.requires=IS_IN_DB(db,db.town.id ,'%(townname)s')
>
> the widget and SQLFORM displays the update/create field as a
> <select><options> with a value selected.  So, on the update/create,
> the screen shows a pre-selected dropdown box with a town name, but on
> read, only the number representing the id is displayed.  Can the
> widget for read be configured to display the selected value as text
> and check boxes (rather than True/False)?
>
> Thanks.
>
> On Jun 10, 9:58 pm, Gary <gary.k.ma...@gmail.com> wrote:
>
> > Massimo,
>
> > Thank you.  You mentioned before that widget worked in the trunk - you
> > are, of course correct, but I just wanted to make note to others that
> > it fails in the current version 1.63.5.  Also, {{=form.custom.labels
> > [fieldname]}} did not work in the trunk.  It failed with "TypeError:
> > 'NoneType' object is unsubscriptable".  Just wanted you to know.
>
> > Thanks again!
>
> > On Jun 10, 5:59 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > On Jun 10, 3:49 pm, Gary <gary.k.ma...@gmail.com> wrote:
>
> > > > Massimo,
>
> > > > Thank you so much for your feedback.  Most of the changes you
> > > > suggested certainly made the code simpler and easier to read, but I
> > > > have a couple of issues that I don't understand.
>
> > > > 1) It appears that the line:
>
> > > > getattr(crud,session.action)(db[tablename],record)
>
> > > getattr(yyy,'xxx') is the same as yyy.xxx
>
> > > > executes the crud call, but I don't understand how getattr() does
> > > > that.  Could you provide a brief explanation?
>
> > > > 2) If I directly return the dictionary that results from setsubmit
> > > > (tablename), what would the format of the return be and what should
> > > > the  variables in the form be named?  I tried a couple of combinations
> > > > (widgets, inpval, dspval) , but they all failed (widget) carried extra
> > > > data (impval) or failed to display an <input> on update.
>
> > > You only need widgets
>
> > > <form>
> > > {{=form.custom.widget.field1}}
> > > {{=form.custom.widget.field2}}
> > > {{=form.custom.widget.field3}}
> > > <input type="submit">
> > > {{=form.hidden_fields()}}
> > > </form>
>
> > > > 3) In thefields(), the value of curform is:
>
> > > > <form action="" enctype="multipart/form-data" method="post"><table><tr
> > > > id="location_poleno__row"><td><label for="location_poleno"
> > > > id="location_poleno__label">Poleno: </label></td><td>EBW 1234</
> > > > td><td></td></tr><tr id="location_town_id__row"><td><label
> > > > for="location_town_id" id="location_town_id__label">Town Id: </label></
> > > > td><td>1</td><td></td></tr> .....
>
> > > > and curform.record is:
>
> > > > <SQLStorage {'electricprovider': None, 'update_record': <function
> > > > <lambda> at 0x9ff80d4>, 'npolesize': None, 'notifydate':
> > > > datetime.datetime(2009, 3, 27, 8, 9, 43), 'id': 2,
> > > > 'specialprotection': None, 'city': 'East Brunswick', 'data1': None,
> > > > 'zipcode': '08816', 'cableprovider': None, 'state': 'NJ', 'town_id':
> > > > 1,  ....
>
> > > > Please notice that in both places, the value of town_id is 1 and not
> > > > the value in the related table.
>
> > > > When I set mydict =  dict(form=curform) is was able to fix a syntax
> > > > error 'mydict does not exist' but I'm not sure that's the right thing
> > > > to do.  However, the real problem is an error message that says
> > > > curform.custom.widget is not iterable.  Even if it fixes it, I'm still
> > > > not sure what the variables in the form should be named.
>
> > > I think you can do:
>
> > > {{for fieldname in form.custom.widget:}}
> > > <label>{{=form.custom.labels[fieldname]}}</label>{{=form.custom.widget
> > > [fieldname]}}
> > > {{pass}}
>
> > > I do not think you need thefields since it only provides info that is
> > > alredy in the form.
>
> > > Not sure if this helps.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to