This is kind of a show stopper. Smartgrid appears to stumble over table format definitions.
Note the commented out format line in this model. db.define_table('dog', Field('dog_name', length=32), ## format='%(name)s', ) db.define_table('owner', Field('name', length=32), Field('phone', length=32), ) db.define_table('dog_owner', Field('dog_id', db.dog), Field('owner_id', db.owner) ) Uncomment the line and smartgrid 1.99.4 raises this exception when trying to add a record to the dog_owner table: <type 'exceptions.TypeError'> string indices must be integers, not str Here is the traceback: Traceback (most recent call last): File "/home/cjk/w-99-4/web2py/gluon/restricted.py", line 204, in restricted exec ccode in environment File "/home/cjk/w-99-4/web2py/applications/doggies/controllers/ dog.py", line 5, in <module> File "/home/cjk/w-99-4/web2py/gluon/globals.py", line 172, in <lambda> self._caller = lambda f: f() File "/home/cjk/w-99-4/web2py/applications/doggies/controllers/ dog.py", line 2, in index form = SQLFORM.smartgrid(db.dog) File "/home/cjk/w-99-4/web2py/gluon/sqlhtml.py", line 1991, in smartgrid user_signature=user_signature,**kwargs) File "/home/cjk/w-99-4/web2py/gluon/sqlhtml.py", line 1581, in grid _class='web2py_form').process( File "/home/cjk/w-99-4/web2py/gluon/sqlhtml.py", line 862, in __init__ inp = self.widgets.options.widget(field, default) File "/home/cjk/w-99-4/web2py/gluon/sqlhtml.py", line 220, in widget return SELECT(*opts, **attr) File "/home/cjk/w-99-4/web2py/gluon/html.py", line 587, in __init__ self._postprocessing() File "/home/cjk/w-99-4/web2py/gluon/html.py", line 1704, in _postprocessing if value and str(c['_value'])==str(value): TypeError: string indices must be integers, not str Here is the controller: def index(): form = SQLFORM.smartgrid( db.owner, ui = 'jquery-ui', onvalidation = crud.archive, ) return dict(form=form) To duplicate the problem: Add one owner and one dog. In your browser, open localhost:8000/dogapp/owner/index Edit the owner. Click the Dog Owner link Note the empty grid with add button. Click Add Observe web2py error message Similar exceptions occur if you use IS_IN_DB to define a format string.