Sorry, wasn't thinking -- the validator is selecting a record from the 
"room" table, not the "booking" table, so you'll need a slightly different 
function for that:

IS_IN_DB(..., label=lambda r: '%s %s' % (r.branch.address, r.room_no))

or if want to use a single function (not tested):

def format_room(record):
    return '%s %s' % (record.branch.address, record.room_no)
...
Field('room', 'reference room', requires=IS_IN_DB(..., label=format_record),
      represent=lambda id, r: format_record(r.room))

Anthony

On Friday, March 22, 2013 2:14:31 AM UTC-4, 黄祥 wrote:
>
> thank you so much for your hint, anthony, but when i test it both of it 
> return an error, any idea about this?
>
> IS_IN_DB(db(db.room.status=='Available'), db.room.id, 
>          label=lambda r: '%s %s' % (r.room.branch.address, r.room.room_no))
> Traceback
>
> 1.
> 2.
> 3.
> 4.
> 5.
> 6.
> 7.
> 8.
> 9.
> 10.
> 11.
> 12.
> 13.
> 14.
> 15.
> 16.
> 17.
> 18.
> 19.
> 20.
> 21.
> 22.
>
> Traceback (most recent call last):
>   File "/home/stifank/Desktop/web2py/gluon/restricted.py", line 212, in 
> restricted
>     exec ccode in environment
>   File 
> "/home/stifank/Desktop/web2py/applications/hotel/controllers/default.py" 
> <http://127.0.0.1:8000/admin/default/edit/futsal/controllers/default.py>, 
> line 181, in <module>
>   File "/home/stifank/Desktop/web2py/gluon/globals.py", line 194, in <lambda>
>     self._caller = lambda f: f()
>   File "/home/stifank/Desktop/web2py/gluon/tools.py", line 2971, in f
>     return action(*a, **b)
>   File 
> "/home/stifank/Desktop/web2py/applications/hotel/controllers/default.py" 
> <http://127.0.0.1:8000/admin/default/edit/futsal/controllers/default.py>, 
> line 99, in booking
>     editable=has_membership, deletable=has_membership)
>   File "/home/stifank/Desktop/web2py/gluon/sqlhtml.py", line 2084, in grid
>     search_menu = SQLFORM.search_menu(sfields, prefix=prefix)
>   File "/home/stifank/Desktop/web2py/gluon/sqlhtml.py", line 1663, in 
> search_menu
>     for k,v in field.requires.options()],
>   File "/home/stifank/Desktop/web2py/gluon/validators.py", line 545, in 
> options
>     self.build_set()
>   File "/home/stifank/Desktop/web2py/gluon/validators.py", line 542, in 
> build_set
>     self.labels = [self.label(r) for r in records]
>   File 
> "/home/stifank/Desktop/web2py/applications/hotel/models/db_wizard_requires.py"
>  
> <http://127.0.0.1:8000/admin/default/edit/futsal/models/db_wizard_requires.py>,
>  line 57, in <lambda>
>     label=lambda r: '%s %s' % (r.room.branch.address, r.room.room_no))
> AttributeError: 'Row' object has no attribute 'room'
>
>
> put in db.py
> def format_room(record):
>     return '%s %s' % (record.room.branch.address, record.room.room_no)
>
>
> Traceback
>
> 1.
> 2.
> 3.
> 4.
> 5.
> 6.
> 7.
> 8.
> 9.
> 10.
> 11.
> 12.
> 13.
> 14.
> 15.
> 16.
> 17.
> 18.
> 19.
> 20.
> 21.
> 22.
>
> Traceback (most recent call last):
>   File "/home/stifank/Desktop/web2py/gluon/restricted.py", line 212, in 
> restricted
>     exec ccode in environment
>   File 
> "/home/stifank/Desktop/web2py/applications/hotel/controllers/default.py" 
> <http://127.0.0.1:8000/admin/default/edit/futsal/controllers/default.py>, 
> line 181, in <module>
>   File "/home/stifank/Desktop/web2py/gluon/globals.py", line 194, in <lambda>
>     self._caller = lambda f: f()
>   File "/home/stifank/Desktop/web2py/gluon/tools.py", line 2971, in f
>     return action(*a, **b)
>   File 
> "/home/stifank/Desktop/web2py/applications/hotel/controllers/default.py" 
> <http://127.0.0.1:8000/admin/default/edit/futsal/controllers/default.py>, 
> line 99, in booking
>     editable=has_membership, deletable=has_membership)
>   File "/home/stifank/Desktop/web2py/gluon/sqlhtml.py", line 2084, in grid
>     search_menu = SQLFORM.search_menu(sfields, prefix=prefix)
>   File "/home/stifank/Desktop/web2py/gluon/sqlhtml.py", line 1663, in 
> search_menu
>     for k,v in field.requires.options()],
>   File "/home/stifank/Desktop/web2py/gluon/validators.py", line 545, in 
> options
>     self.build_set()
>   File "/home/stifank/Desktop/web2py/gluon/validators.py", line 542, in 
> build_set
>     self.labels = [self.label(r) for r in records]
>   File "/home/stifank/Desktop/web2py/applications/hotel/models/db_wizard.py" 
> <http://127.0.0.1:8000/admin/default/edit/futsal/models/db_wizard.py>, line 
> 7, in format_room
>     return '%s %s' % (record.room.branch.address, record.room.room_no)
> AttributeError: 'Row' object has no attribute 'room'
>
>
>
>
>
>>>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to