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.