Sunday, January 18, 2009

Base class ReferenceProperty in AppEngine


Google AppEngine






Mixed polymorphic and monomorphic classes


from google.appengine.ext import db

from google.appengine.ext.db import polymodel



class Base(db.Model):

  date_added = db.DateTimeProperty(auto_now_add=True,auto_now=False)



class Person(Base):

  name = db.StringProperty()



class Item(Base, polymodel.PolyModel):

  owner = db.ReferenceProperty(Person, collection_name="stuff")

  motive = db.StringProperty()



class Book(Item):

  title = db.StringProperty()



class Weapon(Item):

  name = db.StringProperty()

  battleground = db.StringProperty()



p = Person(name="Barack")



p.put()



Book(title="Quantum Mechanics", owner=p, motive="Curiosity").put()

Weapon(name="Wit", battleground="Debate", owner = p, motive="Education").put()



b.put()



for x in p.stuff:

  print "%s: %s" % (x.motive, x.date_added)