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