Hi Anthony, Thanks for this useful information. I tried searchform.process(keepvalues=True).accepted But it evaluates to False. While below given line evaluates to True. if searchform.accepts(request.vars,keepvalues=True): I dont know why does it happens. Have I done anything wrong over here? Could you please suggest any solution to achieve sorting and paging in this scenario? Thank you.
On Tuesday, 10 September 2013 16:43:22 UTC+5:30, Anthony wrote: > You are processing the form twice: > > if searchform.accepts(request.vars,keepvalues=True): > searchform.process() > > searchform.process() ultimately calls .accepts() -- no need to call both. > The preferred method is now: > > if searchform.process(keepvalues=True).accepted: > > Also, once you load the first page of the grid, you won't be able to load > additional pages or do any sorting because in the controller, the grid is > only created within the "if searchform.accepts(...)" condition, which only > happens when the search form is submitted (not on other clicks within the > grid). > > Finally, even if the grid could be navigated, your code is re-filling the > temp db with the same data on every request, which is inefficient. > > Anthony > > On Tuesday, September 10, 2013 12:28:47 AM UTC-4, Gliese 581 g wrote: >> >> Hi Massimo, >> Thanks for suggesting this solution. I am now able to display a gird on >> my page with pagination and sorting options available. But whenever I click >> on page number or try to sort a column by clicking on its header, nothing >> happens. I get a blank page. I tried to debug it and found that when I >> click on any page number, post back takes place but form doesnt get >> validated(validation fails) and I do not get to see any grid. I am posting >> my code here. Please correct me if I have done anything wrong in it. >> >> def index(): >> result=None >> x=None >> searchform=SQLFORM.factory( >> Field('id', 'unicode',requires=empty_to_none), >> Field('account','unicode',requires=empty_to_none), >> Field('fromdate','unicode',requires=empty_to_none), >> Field('todate','unicode',requires=empty_to_none), >> Field('name','unicode',requires=empty_to_none), >> Field('status','integer'), >> >> Field('method',requires=IS_EMPTY_OR(IS_IN_SET(['Method1','Method2','Method3'], >> >> sort=True, zero='Select'))), >> >> Field('type','unicode',requires=IS_EMPTY_OR(IS_IN_SET(['Type1','Type2',], >> sort=True, zero='Select'))), >> Field('altname','unicode',requires=empty_to_none), >> >> Field('group','unicode',requires=IS_EMPTY_OR(IS_IN_SET(['Group1','Group2',], >> sort=True, zero='Select'))), >> Field('assignee','unicode',requires=empty_to_none), >> submit_button = 'Search' >> ) >> >> ##THIS CONDITION FAILS DURING POSTBACK(WHEN I CLICK ON PAGE NUMBERS OR >> COLUMN HEADERS FOR SORTING) >> if searchform.accepts(request.vars,keepvalues=True): >> searchform.process() >> id=searchform.vars.id >> status=searchform.vars.status >> method=searchform.vars.method >> name=searchform.vars.name >> account=searchform.vars.account >> fromdate=searchform.vars.fromdate >> todate=searchform.vars.todate >> type=searchform.vars.type >> altname=searchform.vars.altname >> assignee=searchform.vars.assignee >> group=searchform.vars.group >> ##THIS METHOD RETURNS A LIST OF OBJECTS >> result=__get_objects(id, status, method, name, >> account, fromdate, todate, type, altname, >> assignee, group) >> ##THIS IS CODE TO CREATE IN MEMORY TEMPORARY DATABASE >> fields = [Field('ID'), Field('Method'), Field('Date'), >> Field('Status'), Field('Account'), Field('Name'), >> Field('Amount1'), Field('Amount2'), Field('Type') >> ] >> >> temp_db = cache.ram('tmp_db',lambda: >> DAL('sqlite:memory').define_table('mytable',*fields)._db, None) >> temp_db.mytable.truncate() >> for obj in result['output']: >> temp_db.mytable.insert(ID=obj['id'], >> Method=obj['method'], >> Date=obj['date'], >> Status=obj['status'], >> Account=obj['account'], >> Name=obj['name'], >> Amount1=obj['amount1'], >> Amount2=obj['amount2'], >> Type=obj['type']) >> >> x = SQLFORM.grid(temp_db.mytable,create=False, deletable=False, >> editable=False, maxtextlength=64, >> paginate=2,searchable=False,details=False) >> else: >> response.flash = 'please fill the form' >> return dict(form=searchform,result=result,x=x) >> >> >> When postback happens due to any sorting or paging action, >> *searchform.accepts(request.vars,keepvalues=True) >> *fails and no grid gets displayed. Please help me to fix this. >> >> Thank you >> >> On Sunday, 8 September 2013 19:17:03 UTC+5:30, Massimo Di Pierro wrote: >> >>> You cannot unless you first load the data in a database. You can use a >>> temporary in memory database like this: >>> >>> fields = [Field('one'), Field('two'), Field('three'), ...] >>> temp_db = cache.ram('tmp_db',lambda: >>> DAL('sqlite:memory').define_table('mytable',*fields)._db, None) >>> >>> temp_db.mytable.truncate() >>> temp_db.mytable.insert(....) >>> form = SQLFORM.grid(temp_db.mytable) >>> >>> >>> On Sunday, 8 September 2013 05:35:13 UTC-5, Gliese 581 g wrote: >>>> >>>> Hi Massimo, >>>> I will try to be more specific. >>>> I am developing a web2py application(APP1) which works on the data >>>> which it gets from another web2py application(APP2). >>>> We do not have access to the database of APP2, we access their data >>>> through jsonrpc web services exposed by APP2. >>>> Now, there is an API(get_objects) of APP2 which gives us a list of >>>> certain type of objects. APP2 internally fetch this data from its database >>>> and convert it to a list of specific type of objects. >>>> I want it to be displayed in a table with sorting and paging >>>> capabilities. >>>> Can I use web2py's SQLFORM.grid to achieve this? >>>> Please suggest me any solution. >>>> >>>> Thank you. >>>> >>>> On Friday, 6 September 2013 20:26:54 UTC+5:30, Gliese 581 g wrote: >>>>> >>>>> ** >>>>> >>>>> I am working on a project where we have a different subsystem whose >>>>> API returns a list of certain type of objects. >>>>> >>>>> I want it to be displayed on my form. Can I use SQLForm.grid for this? >>>>> Please suggest. >>>>> >>>> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.