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.