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 <[email protected]> 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)