I think you want format='%(dog_name)s' -- there is no 'name' field in the 'dog' table.
Anthony On Tuesday, December 27, 2011 11:11:18 AM UTC-5, Cliff wrote: > > 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. > >