This is not backward compatible, it also make a hidden select every
time you access a record. So if you select 100 records that have
reference and loop over them, you'd be making 100 additional selects.
If this is what you want to do, I think it is better to be explicit or
do a join.

On Oct 27, 1:43 am, "mr.freeze" <nat...@freezable.com> wrote:
> I made a simple patch that lets this work and is seemingly backwards
> compatible (didn't break my apps anyway).  It basically automatically
> does a select for any reference fields so you can do this (db.things
> has a reference field 'author' to auth_user in this example):
>
> record = db(db.things.id==1).select()[0]
> print record.author.email
>
> What do you think?
>
> ### Eclipse Workspace Patch 1.0
> #P web2py
> Index: gluon/sql.py
> ===================================================================
> --- gluon/sql.py        (revision 1310)
> +++ gluon/sql.py        (working copy)
> @@ -451,6 +451,8 @@
>              else:
>                  return "'F'"
>      if fieldtype[0] == 'i':
> +        if isinstance(obj,DALStorage):
> +            return str(int(obj.id))
>          return str(int(obj))
>      elif fieldtype[0] == 'r':
>          if fieldtype.find('.')>0:
> @@ -2926,7 +2928,7 @@
>              if field.type[:10] == 'reference ':
>                  referee = field.type[10:].strip()
>                  rid = value
> -                row[tablename][fieldname] = rid
> +                row[tablename][fieldname] = self._db(self._db[referee]
> ['id']==rid).select()[0]
>              elif field.type == 'blob' and value != None:
>                  row[tablename][fieldname] = base64.b64decode(str
> (value))
>              elif field.type == 'boolean' and value != None:
>
> On Oct 26, 11:47 pm, "mr.freeze" <nat...@freezable.com> wrote:
>
> > Also, why doesn't this work?:
>
> > record = db(db.tablename.id==1).select()[0]
> > print record.author.email
>
> > It seems like it should work since author is a reference to auth_user
> > and it's referencing a distinct record.
>
> > On Oct 26, 11:25 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > Given:
>
> > > ... Field("author", db.auth_user, default=auth.user.if if auth.user
> > > else 0) ...
>
> > > db.tablename.author.requires=IS_IN_DB(db,'auth_user.id','%(first_name)
> > > s %(last_name)s')
>
> > > You can do
>
> > > record = db(db.tablename.id>0).select().first()
> > > print db.auth_user[record.author].first_name
>
> > > and/or
>
> > > row= db(db.tablename.author==db.auth_user.id).select.first()
> > > print row.tablename, row.auth_user.first_name
>
> > > On Oct 26, 10:58 pm, Wiiboy <jordon...@gmail.com> wrote:
>
> > > > And then how would I get the user's info?
>
> > > > db(db.auth_user.id == db.tablename.author)
>
> > > > ?
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py-users" 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