this seems to me like a bug in polymodel on GAE. my guess is that the proper implementation would be to have 2 tables, location_outdoor and location_indoor in the GAE database. does this seem correct to you?
i can't guarantee my speed right now...but i can look into the DAL and see if i can find a problem with polymodel on GAE. can you file a ticket in google code as well so we don't forget? thanks! christian On Friday, November 30, 2012 2:27:21 PM UTC-8, Gian Luca Decurtins wrote: > > HI cfh > > You're right. As far as I can see in the datastore viewer there is only > one table. There is also a class value available. > > I did try a few more things (resetting local datastore and removing the > entries in index.yaml) but I'm not able to access all three tables using > the following controller: > > @auth.requires_signature() > > def form(): > > table = request.args(0) > > if not table in db.tables(): redirect(URL('error')) > > db[table].id.readable = False > > form = SQLFORM.grid(db[table],args=request.args[:1], > user_signature=True) > > return dict(form=form) > > When I do call " > http://localhost:8080/init/location/form/location_outdoor?_signature=xxx' > I receive: > > AttributeError: 'location' object has no attribute 'country' > > > When I call " > http://localhost:8080/init/location/form/location_indoor?_signature=xxx' > I receive: > > AttributeError: 'location_outdoor' object has no attribute > 'location_outdoor' > > > Right after resetting the datastore I'm able to access 'location, > 'location_outdoor' and 'location_indoor'. Once I create an indoor or > outdoor location I'm not able to access the other form anymore. The > 'location' form is still available. > > > I'm trying to store all location information (outdoor / indoor) in one > polymodel. I do want to take advantage of having to have only one reference > between devices and locations. > > > Any suggestions? > > > Greetings > > -Luca. > > > Am Donnerstag, 29. November 2012 19:27:03 UTC+1 schrieb howesc: >> >> i have not used polymodels so i can't answer the last question.....but >> about that last one, when you access the GAE datastore viewer (as provided >> by GAE), what is the name of the table/model that is stored there? does it >> store location_indoor and location_outdoor, or just location with optional >> fields? (i'd personally expect the former, but your experience sounds like >> the latter). >> >> for your other questions see the example under this heading >> http://web2py.com/books/default/chapter/29/07?search=grid#SQLFORM.grid-and-SQLFORM.smartgrida >> few paragraphs in it shows a controller that can handle any table. >> >> cfh >> >> On Thursday, November 29, 2012 6:41:40 AM UTC-8, Gian Luca Decurtins >> wrote: >>> >>> Hi all >>> >>> Given the following model (polymodel location -> location_outdoor & >>> location_indoor) on GAE: >>> >>> define_table('location', >>> Field('name', 'string'), >>> Field('active', 'boolean'), >>> polymodel = True) >>> >>> define_table('location_outdoor', >>> db.location, >>> Field('country', 'string'), >>> Field('city', 'string'), >>> Field('postcode', 'string'), >>> Field('street', 'string'), >>> Field('building', 'string'), >>> polymodel = db.location) >>> >>> define_table('location_indoor', >>> db.location >>> Field('location_outdoor', db.location_outdoor), >>> Field('floor', 'string'), >>> Field('room', 'string'), >>> polymodel = db.location) >>> >>> - Is there a way to create a generic controller (using SQLFORM.grid) >>> which is able to create outdoor or indoor locations (display either >>> location_outdoor or location_indoor fields)? >>> I'm thinking of a select field where I can select the class. Depending >>> on the class it will show the available fields. >>> I should be able to modify the SQLFORM.grid to get view and edit >>> operations to use the correct class. But what about the create operation? >>> >>> - How can I add an extra field to the SQLFORM.grid view form which >>> displays the location? I would like to add a field which does contain a >>> generated QR-code. >>> >>> - Why are the indexes in index.yaml always called "location" and not >>> "location_outdoor" and "location_indoor"? I'm often receiving the error >>> message that location_indoor does not contain 'city', which is true. >>> >>> Cheers >>> -Luca. >>> >> --