I am working on making my app compatible with both Python 2 and 3 (I want to continue running on Python 2.7 until I am sure it is stable, so that I can revert to Python 2 if obscure errors occur after switching to Python 3)
grid = SQLFORM.smartgrid(db.Events, linked_tables=['Reservations'],
constraints=dict(Reservations=resconstraint),
left=dict(Reservations=[db.Members.on(
db.Members.id == db.Reservations.Member)]),
orderby=dict(Events=~db.Events.Date,
Reservations=resorder),
headers=dict(Reservations={'Members.Membership':'Status'}),
fields=dict(Events=[db.Events.Date, db.Events.Event, db.Events.Venue, db.Events.Speaker,
db.Events.Revenue, db.Events.Waitlist, db.Events.Attendees],
Reservations=[db.Reservations.Member, db.Members.Membership, db.Members.Paiddate,
db.Reservations.Affiliation, db.Reservations.Notes, db.Reservations.Waitlisted,
db.Reservations.Confirmed, db.Reservations.Totalcost, db.Reservations.Tbc]),
links=dict(Events=event_links,
Reservations=[dict(header='', body=lambda r: A('Email', _href=URL('composemail', vars=dict(resvid=
r.Reservations.id, eventid=request.args[2], next=back)))),
dict(header='', body=lambda r: A('Member', _href=URL('members', args=['Members', 'edit', 'Members', r.Reservations.Member]))),
dict(header='', body=lambda r: A('Expand', _href=URL('reservations', args=[r.Reservations.Member, request.args[2]], vars=dict(back=back)))),
dict(header='', body=lambda r: A('Payment', _href=URL('respayment', args=[
r.Reservations.id], vars=dict(back=back))))
]),
deletable=dict(Events=False, Reservations=False),
details=False,
editable=dict(Events=write, Reservations=False),
create=dict(Events=write, Reservations=False),
onvalidation=dict(Events=checktickets),
searchable=dict(Events=True, Reservations=False),
advanced_search=False, sortable=False,
csv = dict(Events=True, Reservations=False),
exportclasses=dict(Events=dict(csv_with_hidden_cols=(Exporter_Generic, 'CSV file',
T("Export selected events to Excel")),
csv=False, xml=False, html=False, json=False, tsv_with_hidden_cols=False, tsv=False)),
paginate=250 if len(request.args)==3 and request.args[2].isdigit() else 20,
maxtextlength=150, user_signature = False, represent_none = '')
Displaying the reservations associated with an event works fine on Python 2.7.