I am not sure of me with JSON and represent, I don't see why it not works
since this seems OK :

 db.album.artist_id.represent = lambda id: db.artist(id).name


For the best pratice... I am not the ritgh guy...

But at least I think that you could get in trouble with .append() if your DB
get large...

Maybe you could have a look to this slice where there is something about
JSON service and represent at controller level :

http://www.web2pyslices.com/slices/take_slice/75

Here other informations that could be outdated not sure :
http://www.web2py.com/examples/static/sphinx/gluon/gluon.contrib.simplejson.html

Richard


On Thu, Sep 1, 2011 at 2:57 PM, Christian Hoffmann <
[email protected]> wrote:

> class MyVirtualFields(object):
>
>         def artist_name(self):
>
>             artistName = db.artist(self.album.artist_id).name
>
>             return artistName
>
>
> db.album.virtualfields.append(MyVirtualFields())
>
>
> This did the trick… but is this considered good practice?
>
> 2011/9/1 Christian Hoffmann <[email protected]>
>
>> Hi Richard,
>>
>> thanks for your quick reply. After adding that to my db.py i still get
>> something like this as JSON reply
>> {"content": [{"name": "the album name", "artist_id": 1, "year": null,
>> "id": 1}]}
>> So still no name for artist_id in JSON and not in default.html
>>
>>
>> I tested something like this:
>>
>> db.album.artist_id.represent = lambda id: db.artist(id).name
>>
>>
>> This works in HTML (the table shows the correct name) but not in JSON,
>> this gives still the artist_id as integer.
>>
>> Also I'd still be able to access the id. Because of this I thought of the
>> extra field.
>>
>> Any ideas?
>>
>>
>>
>> 2011/9/1 Richard Vézina <[email protected]>
>>
>>> Add this below your album model...
>>>
>>> db.album.artist_id.requires=IS_IN_DB(db,db.artist.id,'%(name)s')
>>>
>>> You will have a dropbox instead of a empty field for artist_id field of
>>> table album.
>>>
>>> Richard
>>>
>>> On Thu, Sep 1, 2011 at 1:19 PM, Christian <[email protected]> wrote:
>>>
>>>> Hello everyone,
>>>> given the case, I have these 2 tables:
>>>>
>>>> db.define_table('artist',
>>>>                Field('name'))
>>>>
>>>> db.define_table('album',
>>>>                Field('artist_id', db.artist),
>>>>                Field('name'))
>>>>
>>>> How would I add a field in the album table, (e.g. artist_name), that
>>>> references the corrosponding db.artist.name of the artist table. I
>>>> would like to access the album table via the restful api and I don't
>>>> want to make 2 calls to get the album first and then the artist name
>>>> via artist_id.
>>>>
>>>> Thanks and regards,
>>>> Christian
>>>>
>>>
>>>
>>
>

Reply via email to