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.
>
>