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 -

Reply via email to