Thanks Massimo !!
On 5 oct, 00:07, Massimo Di Pierro <massimo.dipie...@gmail.com> wrote: > NOOOOOOO. Do not abuse eval. there is no need. > > Instead you can do: > > query = db.aa.forcefield == request.vars.forcefield > if request.vars.color != 'ALL: > query &= db.aa.color=request.vars.color > if request.vars.weight !='ALL': > query &= db.aa.weight == request.vars.weigth > query_results = db(query).select() > > It is also a little faster. > > On Oct 4, 1:09 pm, puercoespin <jzaragoza.puercoes...@gmail.com> > wrote: > > > > > In my app, i build a query for the 'all' value in a drop down form. > > > For example: > > > query = '(db.aa.forcefield == request.vars.forcefield)' > > > if request.vars.color != 'ALL: > > > query += ' & (db.aa.color=request.vars.color) ' > > > if request.vars.weight !='ALL': > > > query += ' & (db.aa.weight == request.vars.weigth) ' > > > query_results = db(eval(query)).select() > > > Hope this help... > > > On 2 oct, 18:30, Will <smits...@gmail.com> wrote: > > > > Here is my goal. I have multiple drop down forms populated with the > > > unique values available per field. I want to add a default ALL value > > > to them. > > > I then want to be able to take those values from the form and do a > > > selection based off those variables. I can't seem to be able to > > > select all values per given field oddly using the == query. i have to > > > use the db.field.All selection. I get there by using if statements, > > > if the variable is equal to ALL. I have come up with some workable > > > code but it is very ugly and uses multiple if statements and the > > > manual addition of an 'ALL' value in the sets. I know there has to > > > be a better way. > > > > So how do I add default ALL selections to drop downs, and how can I > > > do a multiple db selection using those variables. Here is example > > > code. > > > ##model > > > db.define_table('aa', Field('name'), > > > Field( 'color','string',label ='color'), > > > Field('weight','integer') > > > ) > > > ##controller > > > def searchdbanddisplay(): > > > var1 = request.vars.col > > > var2 = request.vars.weight > > > ra = db(db.aa.color==var1).select() > > > wa = db(db.aa.weight==var2).select() > > > ####I want to insert one call to db here instead of the top 2 lines to > > > search for both variables, I am presuming using AND and also > > > incorporate the ALL variable if it is selected? > > > return dict(message=T('Hello World'),var1 = var1,var2 = > > > var2,ra=ra,wa=wa) > > > def formtry(): > > > > from sets import Set > > > ra = db().select(db.aa.color, distinct=True) > > > SA = Set() > > > for row in ra: > > > SA.add(row.color) > > > ##ra = db().select(db.aa.color, distinct=True) > > > wa = db().select(db.aa.weight, distinct =True) > > > WA = Set() > > > for row in wa: > > > WA.add(row.weight) > > > > ##form = SQLFORM.factory(SQLField('color', label='Select a > > > service'), requires=IS_IN_DB(db,'aa.color')) > > > form = SQLFORM.factory( > > > Field('color', requires=IS_IN_SET(SA)), > > > Field('weight',requires=IS_IN_SET(WA)) > > > ) > > > if form.accepts(request.vars, session): > > > response.flash = 'form accepted' > > > redirect(URL('index',vars > > > ={'col' :request.vars.color,'weight' :request.vars.weight})) > > > return dict(form = form,vabla = session.vars)- Ocultar texto de la > > > cita - > > - Mostrar texto de la cita -