and i even tried : items =[] items.append(request.args(0)) items.append('Both')
db( (db.table.Field1 == value) & (db.table.Field2 in items)) regards, On Wed, Nov 7, 2012 at 12:56 PM, hasan alnator <halna...@gardeniatelco.com>wrote: > Dear Joe , > > What i want to do is to have a query like this : > > db( (db.table.Field1 == value) & (db.table.Field2 == value or value)) > > i tried it i get no errors but its now working > > Regards > > > On Wed, Nov 7, 2012 at 10:10 AM, Joe Barnhart <joe.barnh...@gmail.com>wrote: > >> I see -- you're right. >> >> The request.args structure is a List() object which web2py defines to >> retrieve values without the exception if it doesn't exist. It has some >> additional interesting capabilities... You can define a default value, >> such as this: >> >> >> request.args(0,default='Both') >> >> >> This will substitute the value 'Both' for request.args[0] should it be >> set to None or be invalid. Or you could cast a string value to an integer >> -- this often happens since the request.args are strings by default, but I >> often pass row ids to be processed elsewhere: >> >> >> URL('default','editrecord',args=[22]) >> >> >> Becomes: >> >> >> http://...../default/editrecord/22 >> >> >> And request.args[0] is now '22' (the string). So we use the "cast" >> keyword to change it to an int: >> >> >> request.args(0,cast=int) >> >> >> There is a ton of behavior in this little class! Thanks for pointing it >> out to me. >> >> -- Joe Barnhart >> >> >> class List(list): >> """ >> Like a regular python list but a[i] if i is out of bounds return None >> instead of IndexOutOfBounds >> """ >> >> def __call__(self, i, default=None, cast=None, otherwise=None): >> """ >> request.args(0,default=0,cast=int,otherwise='http://error_url') >> request.args(0,default=0,cast=int,otherwise=lambda:...) >> """ >> n = len(self) >> if 0 <= i < n or -n <= i < 0: >> value = self[i] >> else: >> value = default >> if cast: >> try: >> value = cast(value) >> except (ValueError, TypeError): >> from http import HTTP, redirect >> if otherwise is None: >> raise HTTP(404) >> elif isinstance(otherwise, str): >> redirect(otherwise) >> elif callable(otherwise): >> return otherwise() >> else: >> raise RuntimeError("invalid otherwise") >> return value >> >> >> >> >> On Tuesday, November 6, 2012 2:24:53 PM UTC-8, Niphlod wrote: >>> >>> >>> One more point -- your "request.args(1)" should be "request.args[1]" >>>> (with square brackets). The first form calls request.args as a function >>>> and passes it the value "1". The second form treats request.args as a >>>> Storage object and asks for the subscript "1". >>>> >>>> -- Joe Barnhart >>>> >>>> Nope, request.args(1) does basically >>> try: >>> result = request.args[1] >>> except: >>> result = None >>> return result >>> >>> the () notation is safer because using request.args[1] if there is no >>> request.args[1] you get an exception. >>> >> -- >> >> >> >> > > --