I would like this. select_refs would get passed to the select() function, this way I did not have to write a join.
Perhaps it could be called join_foreign, defaulted to False Say a student is assigned to a teacher. db(db.students.student_id==1102926).select(foreignkey_join=True) yeilds student.id student.name student.email student.phone student.teacher.namestudent.teacher.room_number and db(db.students.student_id==1102926).select() yeilds where student.teacher is the id. student.id student.name student.email student.phone student.teacher This also allows us to expand to provide auto many-to-many joins as well. This would help add more of an ORM aspect to our DAL without losing any of the sweetness of the DAL. -Thadeus On Tue, Oct 27, 2009 at 11:21 AM, mr.freeze <[email protected]> wrote: > > Too bad, other DAL/ORMs have this. SQLAlchemy calls it a backref and > django calls it a reverse foreign key manager. What if Field had a > 'select_refs=False' attribute so it was configurable? > > On Oct 27, 7:32 am, mdipierro <[email protected]> wrote: > > 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" <[email protected]> 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" <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 [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 -~----------~----~----~----~------~----~------~--~---

