I made your suggested change to all of my tables (and also to the
places where I used IS_NOT_IN_DB), but it doesn't seem to have
helped.  I've wrapped everything in a {{try:}} block and started
poking around.  I've noticed that while records.colnames = ('host.id',
'host.name', 'host.site') when everything works, records.colnames =
('host.site=1',) when I run my select.  And there's the problem, I
didn't know how to do a WHERE clause in my select.  I should have said
this in my controller:

def ports():
    subset, subset_id = request.vars.subset, request.vars.subset_id
    if request.vars.subset:
        ports = db(db.port[subset] == subset_id).select(db.port.ALL,
orderby=db.port.name)
    else:
        ports = db().select(db.port.ALL, orderby=db.port.name)
    return dict(records=ports, subset=subset, subset_id=subset_id)

Everything's working now.  Thanks!

On Jun 23, 11:28 am, mdipierro <[email protected]> wrote:
> db.port.hba.requires = IS_IN_DB(db, 'hba.name')
> db.port.switch.requires = IS_IN_DB(db, 'switch.name')
>
> should be
>
> db.port.hba.requires = IS_IN_DB(db, 'hba.id' '%(name)s')
> db.port.switch.requires = IS_IN_DB(db, 'switch.id','%(name)s')
>
> Let us know if it fixes the problem. There may be something else.
>
> On Jun 23, 6:20 am, samwyse <[email protected]> wrote:
>
>
>
> > I have a database with three tables, switch, hba and port.  The latter
> > is defined as:
> > db.define_table('port',
> >     SQLField('switch', db.switch),
> >     SQLField('name', 'string'),
> >     SQLField('hba', db.hba),
> >     )
> > db.port.name.requires = IS_NOT_EMPTY()
> > db.port.hba.requires = IS_IN_DB(db, 'hba.name')
> > db.port.switch.requires = IS_IN_DB(db, 'switch.name')
>
> > Perhaps foolishly, I want to use the same page to display all of the
> > ports for a given switch or for a given hba, so I added 'subset' and
> > 'subset_id' to my request:
> >  http://127.0.0.1:8000/env_layout/default/ports?subset=switch&subset_id=1
>
> > Here's the code from my controller:
>
> > def ports():
> >     subset, subset_id = request.vars.subset, request.vars.subset_id
> >     if request.vars.subset:
> >         ports = db().select(db.port[subset] == subset_id,
> > orderby=db.port.name)
> >     else:
> >         ports = db().select(db.port.ALL, orderby=db.port.name)
> >     return dict(records=ports, subset=subset, subset_id=subset_id)
>
> > And here's my ports.html:
> > {{extend "layout.html"}}
> > <h1>Select a port...</h1>
> > <table>
> > <tr>
> > {{for field in ['name', 'switch', 'hba']:}}
> >   {{if field != subset:}}
> >     <th>{{=field}}</th>
> >     {{pass}}
> >   {{pass}}
> > </tr>
> > {{for port in records:}}
> >   <tr>
> >   {{for field in ['name', 'switch', 'hba']:}}
> >     {{if field == "name":}}
> >       <td>{{=A(port[field], _href=URL(r=request, f="port?id=%s" %
> > port.id))}}</td>
> >     {{elif field != subset:}}
> >       <td>{{=port[field]}}</td>
> >     {{pass}}
> >   {{pass}}
> >   </tr>
> > {{pass}}
> > </table><br><br>
> > {{=A("Add a new port", _href=URL(r=request, f="new_port"))}}
>
> > This query works OK:  http://127.0.0.1:8000/env_layout/default/ports
> > But this one generates a error:    
> > http://127.0.0.1:8000/env_layout/default/ports?subset=switch&subset_id=1
>
> > Traceback (most recent call last):
> >   File "gluon/restricted.py", line 107, in restricted
> >   File "C:\Program Files\web2py\applications\env_layout/views/default/
> > ports.html", line 40, in <module>
> >   File "gluon/sql.py", line 2363, in __iter__
> >   File "gluon/sql.py", line 2271, in __getitem__
> >   File "gluon/sql.py", line 1192, in __getitem__
> > KeyError: 'switch=1'
>
> > response.write('</div>\r\n        \r\n<h1>Select a port...</h1>\r
> > \n<table>\r\n<tr>\r\n',escape=False)
> > for field in ['name', 'hba', 'switch']:
> >     response.write('\r\n',escape=False)
> >     if field != subset:
> >         response.write('\r\n<th>',escape=False)
> >         response.write(field)
> >         response.write('</th>\r\n',escape=False)
> >         pass
> >     response.write('\r\n',escape=False)
> >     pass
> > response.write('\r\n</tr>\r\n',escape=False)
> > for port in records:   ### this is line 40 ###
> >     response.write('\r\n<tr>\r\n',escape=False)
> >     for field in ['name', 'hba', 'switch']:
> >         response.write('\r\n',escape=False)
> >         if field == "name":
> >             response.write('\r\n<td>',escape=False)
> >             response.write(A(port[field], _href=URL(r=request, f="port?
> > id=%s" % port.id)))
> >             response.write('</td>\r\n',escape=False)
> >         elif field != subset:
> >             response.write('\r\n<td>',escape=False)
> >             response.write(port[field])
> >             response.write('</td>\r\n',escape=False)
> >             pass
> >         response.write('\r\n',escape=False)
> >         pass
> >     response.write('\r\n</tr>\r\n',escape=False)
> >     pass
> > response.write('\r\n</table><br><br>\r\n',escape=False)
>
> > Any idea what's going on?  Or am I doing this all wrong and should be
> > taking a different approach?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to