Great thanks Jim, that did it for me - it's hard being a beginner!!

On Wed, Jul 19, 2017 at 2:09 PM, Jim S <ato.st...@gmail.com> wrote:

> I'd start first with changing this:
>
> links = [lambda ids: A('Download data set',_href=URL("default","down
> load_dataset.csv",args=[ids.id]))]
>
> to this:
>
> links = [lambda ids: A('Download data set',_href=URL("default","down
> load_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","down
>> load_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 a topic in the
> Google Groups "web2py-users" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/
> topic/web2py/pH_iiWr43UI/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> web2py+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

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