I used the code that Massimo posted for returning the xml, which works
perfectly fine when exporting from a single table, but when selecting
fields from two tables it gets stuck, due to table names propagated in
the resultset. Being a newbie w web2py and python I'm not finding an
elegant solution around it, but I know it must be there.

Here is a code snippet:

def export_orders_xml():
...
orders = db(db.order_items.item_id==int(request.args(0)))\
           (db.order_items.order_id==db.order1.id)\
           .select(
                   db.order_items.order_id, \
                   db.order1.first_name, \
                   db.order1.last_name, \
                   )

return xml_list(orders)


#xml tags
def export_xml(rows, fields):
    users=[]
    for row in rows: users.append(TAG.user(*[TAG[f](row[f]) for f in
fields]))
    return TAG.users(*users).xml()

#xml view
def xml_list(rows):
    response.headers['Content-Type']='application/xml'
    return export_xml(rows,['order_items','order1'])
    # would prefer to use it this way: return export_xml(rows,
['first_name','last_name'])

I think TAG should go around something like this:
row['table_name'].field, but not sure how to get to it :)

Rendered output:
- <users>
  - <user>
         <order_items><Row {'order_id': 123}></order_items>
        - <order1>
        <Row {'first_name': 'John', 'order_items': <gluon.dal.Set object at
0x1176689d0>, 'last_name': 'Test', 'update_record': <function <lambda>
at 0x117644050>, 'delete_record': <function <lambda> at 0x117644a28>}>
      </order1>
    </user>

Reply via email to