in your code, macaddr is a resultset of your query. Basically it's a list 
of Rows objects, done like this

[ {'mac_addr' : value}, {'mac_addr':value1}, {'mac_addr' : value2}]

you should "reduce" the list of dictionaries to a list of values.



def get_macaddr():
    # Grab distinct MAC addresses from DB
    macaddr = db(db.wifiusage).select(db.wifiusage.mac_addr, distinct=True)  
    macaddr = [row.mac_addr for row in macaddr] #line added by Niphlod

    form = SQLFORM.factory(
          Field('macaddr', label='Select a MAC Address', requires=IS_IN_SET(
macaddr)))


    return dict(form=form)

And everything should work ok.

On Thursday, October 18, 2012 1:02:44 AM UTC+2, Jason Jeremias wrote:
>
> So I'm trying out Web2py, I'm a complet newbie.  I've been using python to 
> write CGI for years, I have python cgi that I use to display data from 
> mysql db.  Its pretty simple and I thought I'd trying to recreate it using 
> web2py.   Basically its a simple html form that has a drop box and a submit 
> button.  The drop box is filled with mac addresses from a database.  So 
> basically you select the mac address, hit submit and it brings back all the 
> data in the db related to that mac address.  
>
> My current cgi program uses a simple function to grab the distinct mac 
> addresses from the db and put them in to a dropdown.
>
> def PrintSelectMAC():
>   db = MySQLdb.connect("localhost","myuser","mypass","wifi_usage")
>   cursor = db.cursor()
>   sql = 'SELECT DISTINCT(mac_addr) from wifi_usage'
>   cursor.execute(sql)
>   data = cursor.fetchall()
>
>   print ("<b>Select MAC Addresses:</B><BR> \n")
>   print ("<SELECT NAME=\"mac_addr\">")
>
>   for row in sorted(data):
>     macaddr = row[0]
>     print ("<OPTION VALUE=\"%s\">%s") %(macaddr, macaddr)
>
>   print ("</SELECT>")
>
>
> I'm trying to get just this far with Web2py and I'm running into a 
> learning curve or something.  Here's what I've done so far..
>
> in my Model (db.py) I have added..
>
> db = DAL("mysql://myuser:mypass@localhost/wifi_usage")
> db.define_table('wifiusage', 
>                         Field('u_date', 'date'),
>                         Field('account_id', 'string', length=16),
>                         Field('mac_addr', 'string', length=20),
>                         Field('upstream', 'integer'),
>                         Field('downstream', 'integer'),
>                         Field('total', 'integer'),
>                         Field('location', 'string'),
>                         Field('package', 'string')
>                )
>
> So this worked well.  I then populated this database with data.
>
> in my controller (index) I added:
>
> def get_macaddr():
>     # Grab distinct MAC addresses from DB
>     macaddr = db(db.wifiusage).select(db.wifiusage.mac_addr, 
> distinct=True)   
>
>     form = SQLFORM.factory(
>           Field('macaddr', label='Select a MAC Address', 
> requires=IS_IN_SET(macaddr)))
>
>     return dict(form=form)
>
>
> I created a get_macaddr.html view.  It looks like this.
> {{extend 'layout.html'}}
> <h1>This is the get_macaddr.html template</h1>
> {{=form}
>
>
> Here's the issue.  My Form dropdown box. contains entries that look like 
> this.
>
> <Row {'mac_addr': '0123456789ab'}>
>
> What I want is it to contain just the macaddress ''0123456789ab' for the 
> value
>
> I have to admit the syntax is messing with me.  I'm sure I'm doing 
> something silly, Perhaps I've been doing cgi to long.  I want to stick with 
> it and learn web2py, what am I doing wrong?
>
> Thanks
>
>

-- 



Reply via email to