Given three tables, bc, b and c:

define_table('bc', Field('b'), Field('c'),
    Field('b_id', 'reference b', writable=False),
    Field('c_id', 'reference c', writable=False))
define_table('b', Field('x'), Field('y'),
    format='b drops %(x)s and %(y)s')
define_table('c', Field('x'), Field('y'),
    format='c picks %(x)s in %(y)s')

I want to show bc's records through the formats of b and c, i.e.,
   "b drops work and pay", "c picks apples in may"

So I came up with this code for bc's controller:
db.bc.b_id.represent=lambda id,row: db.b._format % db.b[id].as_dict()
db.bc.c_id.represent=lambda id,row: db.c._format % db.c[id].as_dict()
SQLFORM.smartgrid(db.bc, linked_tables['b','c'])


Questions:
. Are those represent properties a good way to do it, or is there a better, 
more web2py-ish way?
. Which one?
. What's the fastest way to deal with the unlikely but possible case of id 
referencing a non-existent record of b or c? My plan would be something 
like:

db.bc.b_id.represent=lambda id,row: safe_b(id, row)
def safe_b(id ,row):
    try:
        return db.b._format % db.b[id].as_dict()
    return 'found broken link!'

For what begins to look like a lot of repeated code to simply show b's and 
c's formats in bc.

Thanks in advance

-- 

--- 
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to