db.define_table('AccTrans',
    Field('Timestamp', 'datetime', default=request.now, writable=False),
    Field('Bank', 'reference Bank_Accounts', writable=False),    #e.g. PayPal, Cambridge Trust, ...
    Field('Account', 'reference CoA',
            requires=IS_IN_DB(db, 'CoA.id', '%(Name)s', orderby=
db.CoA.Name)),
    Field('Event', 'reference Events',
                requires=IS_EMPTY_OR(IS_IN_DB(db, 'Events.id', '%(Event)s', orderby=~db.Events.Date)),
                comment='leave blank if not applicable'),
    Field('Amount', 'decimal(8,2)',
                comment='enter full amount of check (negative) or deposit (positive); split using Edit if multiple accounts',
                requires=IS_DECIMAL_IN_RANGE(-10000, 10000)),    # >=0 for asset/revenue, <0 for liability/expense
    Field('Fee', 'decimal(6,2)', requires=IS_EMPTY_OR(IS_DECIMAL_IN_RANGE(-1000,100))),    # e.g. PayPal transaction fee, <0 (unless refunded)
    Field('CheckNumber', 'integer', default=None, requires=IS_EMPTY_OR(IS_INT_IN_RANGE(1,99999)),
                comment='enter check number if recording a check written'),
    Field('Accrual', 'boolean', default=True, readable=True, writable=False),
    Field('FullAmt', 'decimal(8,2)', writable=False, readable=False),    # for an accrual, the original unsplit amount
    Field('Reference', 'string', writable=False),
    Field('Notes', 'text'),
    singular='Transaction', plural='Check_Register')
Database administration displays the table rows just fine.
Clicking on a record's id field should display the record for editing. Instead I get an error, looks like when its setting up the widget for the first reference field. In my application, grid and smartgrid have no problem with my model.