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