I get the same error with the correct field name.
On Dec 27, 11:15 am, Anthony <abasta...@gmail.com> wrote: > 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.