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 -~----------~----~----~----~------~----~------~--~---