This is now fixed. Here is a final example of usage:
db=DAL('gae')
db.define_table('contact',Field('address'), polymodel=True)
db.define_table('person',Field('first_name'), db.contact,
polymodel=db.contact)
db.define_table('company',Field('business_name'),db.contact,polymodel=db.contact)
if not db(db.contact.id>0).count():
db.person.insert(first_name="John", address='here')
db.company.insert(business_name="John Inc", address='there')
persons = db(db.person.id>0).select()
companies = db(db.company.id>0).select()
contacts = db(db.contact.id>0).select()
# latter includes both people and companies
Mind that you can do:
db.define_table('person',Field('first_name'), db.contact,
polymodel=db.contact)
or
db.define_table('person',db.contact, Field('first_name'),
polymodel=db.contact)
I.e. you must choose explicitly whether the fields of the extended
class should appear after or before the new fields.
On Sep 10, 3:27 pm, Dave <[email protected]> wrote:
> It still has both the original problems. Here's what I'm testing so
> far:
>
> >contacts = db(db.contact.id>0).select()
>
> Returns all contacts, as it should
>
> >people = db(db.person.id>0).select()
>
> Also returns all contacts, instead of just the contacts that are of
> type "person"
>
> >address = people[0].address
>
> Works, and returns the address of the first person.
>
> >name = people[0].first_name
>
> Crashes, with the following trace:
>
> Traceback (most recent call last):
> File "C:\Users\Dave\Documents\Python\web2py\gluon\restricted.py",
> line 188, in restricted
> exec ccode in environment
> File "C:\Users\Dave\Documents\Python\web2py\applications\welcome/
> controllers/default.py:index", line 66, in <module>
> File "C:\Users\Dave\Documents\Python\web2py\gluon\globals.py", line
> 96, in <lambda>
> self._caller = lambda f: f()
> File "C:\Users\Dave\Documents\Python\web2py\applications\welcome/
> controllers/default.py:index", line 23, in index
> File "C:\Users\Dave\Documents\Python\web2py\gluon\sql.py", line 729,
> in __getattr__
> return dict.__getitem__(self,key)
> KeyError: 'first_name'