You can access the 'table._tableobj' which is the generated GAE Model object, however this is not a public interface and not subject to backwards compatibility.
Posts = db['posts']._tableobj Posts.get_by_id(long(id)) Robin On Aug 21, 3:45 am, dlypka <dly...@gmail.com> wrote: > Here are my GAE DALnr snippets. > > Some code has been simplified (by using if stmts with hard-coded > classnames) for brevity. > > I will provide a link to a zip of a working sample next Monday. > > In gluon\contrib\gql.py: > --------------------------------------------------------------------------------------------------- > from google.appengine.ext import db as google_db > from google.appengine.ext.db import polymodel as pm # DLypka Mod to > support PolyModel > : > : > class MyGAEBaseDALnr(pm.PolyModel): #DLypka Mod > selflinkPrev = google_db.SelfReferenceProperty > (collection_name='selflinksPrev') > selflinkNext = google_db.SelfReferenceProperty > (collection_name='selflinksNext') > > class MyGAEBaseDALnrSegment(pm.PolyModel): #DLypka Mod This entity > is a child of MyGAEBaseDALnr > linkToDALnr = google_db.ReferenceProperty(MyGAEBaseDALnr, > required=False, collection_name='linksToDALnr') > > # DLypka Mod: New method > def insertNative(self, **fields): > self._db['_lastsql'] = 'insert' > for field in self.fields: > if not field in fields and self[field].default != None: > fields[field] = self[field].default > if field in fields: > fields[field] = obj_represent(fields[field], self > [field].type, self._db) > tmp = self._tableobj(**fields) > tmp.put() > return dict(nativeRef=tmp, id=tmp.key().id()) > > In Method def _select(self, *fields, **attributes): > : > : > # tablename = table.kind() # DLypka commented out > isPoly = isinstance(table, pm.PolymorphicClass) # DLypka > Patch for PolyModel support > if isPoly: # DLypka Patch for PolyModel support > tablename = table.class_name() # DLypka Patch for > PolyModel support > else: # DLypka Patch for PolyModel support > tablename = table.kind() > > In Method def _create(self): > : > : > #Note: The specific class names are hardcoded in the following if() > stmts for brevity in this snippet. > # This hard coding is replaced in my complete version of my > DALnr > # with a new named parameter 'gaebaseclass' > # added into the define_table() method in gql.py > if self._tablename == 'MyGAEBaseDALnr': > self._tableobj = classobj(self._tablename, > (MyGAEBaseDALnr, ), myfields) > elif self._tablename == 'MyGAEBaseDALnrSegment': > self._tableobj = classobj(self._tablename, > (MyGAEBaseDALnrSegment, ), myfields) > else: > self._tableobj = classobj(self._tablename, > (google_db.Model, ), myfields) > return None > > ========================================================================================================== > > In your applications\init\models\db.py: > ---------------------------------------------------------------------------------------------------------- > db.define_table('DALnr', > db.Field('name','text') > ) > > db.define_table('DALnrSegment', > db.Field('idDALnr',db.DALnr), # web2py reference to > parent > db.Field('level','integer'), > db.Field('name','text') > ) > > myDALnrNativeInstance00keys = db.DALnr.insertNative > (level=0,name='DALnr_01') # I cloned insert() but I return a dict() > with the native ref as well as id > myDALnrNativeInstance00 = myDALnrNativeInstance00keys['nativeRef'] > myDALnrNativeInstance00id = myDALnrNativeInstance00keys['id'] > > rows=db(db.DALnr.id > 0).select() > for row in rows: > myDALnrInstance00 = row # NOTE: There is only a single row here, > so myDALnrInstance00 will be the row we just inserted into the web2py > DAL > > myDALnrSegmentNativeInstance00_00keys = db.DALnrSegment.insertNative > (idDALnr = myDALnrNativeInstance00id, level=0, > name='DALnrSegment_00_01') > myDALnrSegmentNativeInstance00_00 = > myDALnrSegmentNativeInstance00_00keys['nativeRef'] > myDALnrSegmentNativeInstance00_00.linkToDALnr = > myDALnrNativeInstance00 # Link this child to its parent > > myDALnrSegmentNativeInstance00_00.put() # This rewrites (updates) the > entity to have the updated value in linkToDALnr set in the previous > stmt > > # <=== NOTE This is the Interesting part !!! ======= > links1 = myDALnrNativeInstance00.linksToDALnr # <=== NOTE: this > property was AUTOMATICALLY maintained by the automatic bidirectional > nature of the ReferenceProperty, so that the 'parent' has a list of > refs to its related children, without any explicit code to add > them!!! > # links1 is a google.appengine.ext.db.query > # It is a db.Query > > # loop on links1 which is a column on the parent entity and see what > you get: > for key in links1: > childref = key # childref is (magically) a MyGAEBaseDALnrSegment > which is a child of MyGAEBaseDALnr > > -- End of DALnr Snippets for GAE --- --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---