I'd start first with changing this:

links = [lambda ids: A('Download data 
set',_href=URL("default","download_dataset.csv",args=[ids.id]))]

to this:

links = [lambda ids: A('Download data 
set',_href=URL("default","download_dataset.csv",args=[ids.MAIN.id 
<http://ids.id/>]))]

When you add the LEFT join you then need to specify which table to get the 
field from.

-Jim


On Wednesday, July 19, 2017 at 6:44:45 AM UTC-5, Matthew J Watts wrote:
>
> Hi all
>
> I'm having some problems  trying to achieve the following  
>
> I have a grid with left joins which selects a subset of entries in my 
> database -(query between 3 tables) 
>
>  i then want to be able to set up links within the grid that sends the id 
> from each row (MAIN table) to a seperate function (another query between 
> many tables). 
>  
> I then want to trigger a download 'csv' file. 
>
> So far, I have managed to get this working if I use one table in the grid 
>  (no left joins), however when i set up left joins within the grid,i get an 
> 'AttributeError' message. Somehow, by setting up the left joins, i loose 
> the main id that i  want to send to the seperate function - although i have 
> set up  'field_id=db.MAIN.id <http://db.main.id/>' in the grid
>
> Here's the code:
>
> *Controller*
>
> def vec_dyn_query():
>     links = [lambda ids: A('Download data 
> set',_href=URL("default","download_dataset.csv",args=[ids.id]))]
>     grid = SQLFORM.grid((db.MAIN), 
>                         field_id=db.MAIN.id,
>                         left = [db.StudyLocation.on(db.MAIN.LocationID == 
> db.StudyLocation.id), db.TAXON.on(db.MAIN.TaxonID == db.TAXON.id)],
>                         links=links,
>                         deletable=False, editable=False, details=False, 
> selectable=False, create=False, csv=False)
>     return locals()
>
> def download_dataset():
>     main_id = request.args(0,cast=int)
>     dataset = db(db.MAIN.id == request.args[0]).select()
>     return dict(dataset=dataset)
>
> *Views*
>
> {{
> import cStringIO
> stream = cStringIO.StringIO()
> dataset.export_to_csv_file(stream)
> response.headers['Content-Type'] = 'text/csv'
> response.write(stream.getvalue(), escape=False)
> }}
>
> Note - if i take away the 'left = [db.StudyLocation.on(db.MAIN.LocationID 
> == db.StudyLocation.id), db.TAXON.on(db.MAIN.TaxonID == db.TAXON.id)],' 
> Everything works fine
>
> Thanks for your help in advance
>
> Matt
>

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