You can call .as_dict() on a row object inside an iteration through 
.render(). Here is a one-liner to replace all your code:

json.dumps(dict(data=[{k: v for sub_row in row.as_dict().values() for (k, v) 
in sub_row.iteritems()}
                      for row in persons.render()]))

The list comprehension iterates through persons.render(), which yields a 
Row object for each record (with the represent functions applied to each 
field). For each Row object, there is then a dictionary comprehension with 
two "for" clauses -- the first converts the Row to a nested dict via 
.as_dict and then uses .values() to extract the two nested dicts into a 
list containing the two dicts, and the second then calls .iteritems() on 
each of the dicts in order to generate a new dictionary.

Note, you still have a problem -- you have two fields with the same name 
(i.e., "name"), so in the combined dictionary, the second will overwrite 
the first.

Anthony

On Thursday, October 12, 2017 at 5:19:26 AM UTC-4, Ricardo Oliveira wrote:
>
> Hi Anthony,
>
> Thanks for your reply.
> That was also my initial solution.
> Problem is I need to use render() in order to force the lambdas of the 
> table fields to be executed, and I can't seem to find a way to combine 
> render() and as_dict(), that's why I used the approach of iterating through 
> the Rows.
>
> Is there some way to do this? That would also work.
>
> Thanks again.
> Ricardo.
>
>
> On Wednesday, October 11, 2017 at 11:05:56 PM UTC+1, Anthony wrote:
>>
>> The problem is here:
>>  
>>
>>>             for field in person[table]:
>>>
>>
>> person[table] is a Row object, and when the Row object includes the 
>> record ID, it also includes the special .update_record and .delete_record 
>> attributes. So, you'll either have to specify the fields explicitly, or 
>> check the types (the Row.as_dict method takes the latter approach).
>>
>> Anthony
>>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to