Replace .select() with ._select() and print/output the result so we can see the exact SQL generated.
On Monday, September 19, 2016 at 11:53:49 AM UTC-4, Peter wrote: > > Thanks for your response Anthony! > > I have obviously misunderstood a reference I read somewhere saying that > reference fields were given special attributes and gave an example > something like db.fieldname.name I assumed the trailing .name came from > the referenced table attributes. > > So I have modified the code ... > > def generate_inv_details(): > > session.inv_details = [] > session.inv_total = 0 > today = datetime.date.today() > > query = db( (db.task.person.belongs( session.company_persons)) > & (db.task.start_time <= today ) > & (db.task.charge_to == 'COMPANY' ) > & (db.task.task_status == 'BILLABLE') > & (db.person.id==db.task.person)) > > rows=db(query).select( db.task.person, > db.person.name, > db.task.title, > db.task.start_time, > db.task.duration, > db.task.task_type, > db.task.task_status, > db.task.charge_to, > db.task.charge, > db.task.payment_status ) > > session.inv_details=rows > > for row in session.inv_details: > session.inv_total += row.task.charge > > > - added the join (I hope correctly) in the query > - used full "tablename.fieldname" format to reference the > person.name in the select statement > - removed the newline slashes > > > > > The relevant table excerpts... > > > > db.define_table('person', > > Field( 'name' , requires=IS_NOT_EMPTY() , comment="*"), > Field( 'status' , requires=IS_IN_SET(PERSON_STATUS) , comment="*") > , > Field( 'type' , requires=IS_IN_SET(PERSON_TYPES) , comment="*") > , > Field( 'company' , 'reference company' , comment="*"), > Field( 'role' , 'string' , comment='for CONTACTS not CLIENTS'), > Field( 'address' , comment="Use ',' to seperate address lines"), > Field( 'mobile_phone' , label='Mobile' , requires=IS_EMPTY_OR(is_phone), > comment="Can use '-' to separate prefix for clarity" ), > Field( 'office_phone' , label='Office' , requires=IS_EMPTY_OR(is_phone), > comment="Can use '-' to separate prefix for clarity" ), > Field( 'home_phone' , label='Home' , requires=IS_EMPTY_OR(is_phone), > comment="Can use '-' to separate prefix for clarity" ), > Field( 'email' , requires=IS_EMPTY_OR(IS_EMAIL()) ), > Field( 'date_of_birth' , 'date' ), > Field( 'referrer_ref' , 'string' , default=None), > Field( 'notes' , 'text' ), > Field( 'created_by' , db.auth_user , default=me , writable=False , > readable=False ), > Field( 'created_on' , 'datetime' , default=request.now , > writable=False , readable=False ), > format=' %(type) %(name)s Referrer Ref %(referrer_ref)s') > > db.define_table('task', > > Field( 'task_type' , requires=IS_IN_SET(TASK_TYPES) , comment="*" ), > Field( 'task_status' , requires=IS_IN_SET(TASK_STATUS) , comment="*"), > Field( 'start_time' , 'datetime' , default=request.now > ,requires=IS_NOT_EMPTY() , comment="*"), > Field( 'duration' , default='1Hr' ), > Field( 'title' , default="Session ##" , requires=IS_NOT_EMPTY() > , comment="*"), > Field( 'person' , 'reference person' , comment="*"), > Field( 'description' , 'text' ), > Field( 'charge' , 'double' , default=0.0), > Field( 'charge_to' , default='COMPANY' , > requires=IS_IN_SET(CHARGE_TO) , comment="* [COMPANY for Invoicing, > CONTACT for Receipting]"), > Field( 'payment_status' , default='BILLABLE' , > requires=IS_IN_SET(PAYMENT_STATUS) , comment="* [BILLABLE for Invoicing or > Receipting]"), > Field( 'invoice_number' , 'integer' , default=None , writable=False ), > Field( 'invoice_date' , 'date' , default=None , writable=False ), > Field( 'created_by' , db.auth_user , default=me , writable=False , > readable=False ), > Field( 'created_on' , 'datetime' , default=request.now , > writable=False , readable=False ), > format= '%(person)s %(start_time)s %(task_type)s %(task_status)s > %(charge)s') > > > > with the modified code I am still getting the same error > > Traceback > > Traceback (most recent call last): > File "/home/peter/web2py/gluon/restricted.py", line 227, in restricted > exec ccode in environment > File "/home/peter/web2py/applications/PAPAIM/controllers/default.py" > <http://127.0.0.1:8000/admin/default/edit/PAPAIM/controllers/default.py>, > line 566, in <module> > File "/home/peter/web2py/gluon/globals.py", line 417, in <lambda> > self._caller = lambda f: f() > File "/home/peter/web2py/gluon/tools.py", line 4241, in f > return action(*a, **b) > File "/home/peter/web2py/applications/PAPAIM/controllers/default.py" > <http://127.0.0.1:8000/admin/default/edit/PAPAIM/controllers/default.py>, > line 347, in preview_invoice > generate_inv_details() > File "/home/peter/web2py/applications/PAPAIM/models/extras.py" > <http://127.0.0.1:8000/admin/default/edit/PAPAIM/models/extras.py>, line 25, > in generate_inv_details > db.task.payment_status ) > File "/usr/local/lib/python2.7/dist-packages/pydal/objects.py", line 2020, > in select > return adapter.select(self.query, fields, attributes) > File "/usr/local/lib/python2.7/dist-packages/pydal/adapters/sqlite.py", > line 123, in select > return super(SQLiteAdapter, self).select(query, fields, attributes) > File "/usr/local/lib/python2.7/dist-packages/pydal/adapters/base.py", line > 1296, in select > return self._select_aux(sql,fields,attributes) > File "/usr/local/lib/python2.7/dist-packages/pydal/adapters/base.py", line > 1253, in _select_aux > self.execute(sql) > File "/usr/local/lib/python2.7/dist-packages/pydal/adapters/base.py", line > 1388, in execute > return self.log_execute(*a, **b) > File "/usr/local/lib/python2.7/dist-packages/pydal/adapters/base.py", line > 1382, in log_execute > ret = self.get_cursor().execute(command, *a[1:], **b) > OperationalError: near "<": syntax error > > > > > > > > -- 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.