Oh yes, good point -- the delete operation happens via Ajax, so the grid full page is not reloaded. You can try SQLFORM.grid(..., client_side_delete=True), though not sure that will work if the grid isn't inside a component. Another option is to set response.js to some JS code to update the sum after a delete.
Anthony On Saturday, January 25, 2014 12:02:29 PM UTC-5, horridohobbyist wrote: > > Thanks for the tip about database sum. I've also moved most of the logic > into the controller. > > However, your suggestion that the database sum should occur *after* the > SQLFORM.grid is incorrect. I tried it. > > The problem seems to be that the page is not refreshed after a *delete*, > whereas the page *is* refreshed after an *update*. I surmise the reason > is because when you do an update, you're brought to another page with the > update form, and consequently, once you're finished with the form > submission, the previous page is refreshed. > > But when you do a delete, you stay on the current page. You get a pop-up > asking for delete confirmation, but otherwise there is no reason for the > page to refresh. This may also explain why the label "xx records found" > from SQLFORM.grid does not change; "xx" is unchanged after a delete. > > I believe this delete behaviour is wrong. So the question is: How do you > force a page refresh after a delete? > > Thanks. > > On Saturday, 25 January 2014 08:50:10 UTC-5, Anthony wrote: >> >> The line in question comes *before* SQLFORM.grid is called (which is >> where the delete happens), so the delete hasn't yet happened at that point. >> >> A couple other points: >> >> - You should really keep your code in the controller and limit your >> view file to display logic. >> - You can have the database calculate the sum of a numeric field for >> you rather than iterating over records in Python. See >> >> http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#sum,-avg,-min,-max-and-len >> . >> >> Anthony >> >> On Saturday, January 25, 2014 7:17:44 AM UTC-5, horridohobbyist wrote: >>> >>> Okay, I know the problem now. After a delete is performed, the line >>> indicated by the comment below still thinks that the record is there, even >>> though the record is verifiably absent when I check in Database >>> Administration! It almost looks like a caching problem. I tried a >>> db.commit() before the comment line, but it made no difference. >>> >>> {{ >>> import locale >>> locale.setlocale(locale.LC_ALL,'en_CA.utf8') >>> >>> total = 0 >>> # the following line does not recognize the deletion >>> rows = db(db.cart.buyer_id==auth.user_id).select() >>> for row in rows: >>> total += row.subtotal >>> pass >>> }} >>> >>> {{=SQLFORM.grid((db.cart.buyer_id==auth.user_id), >>> maxtextlength=1000, >>> paginate=10, >>> searchable=False, >>> details=False, >>> editable=True, >>> deletable=True, >>> create=False, >>> csv=False) >>> }} >>> >>> <div style="text-align:right;font-size:large">Total: >>> {{='C'+locale.currency(total,grouping=True)}}</div> >>> >>> >>> >>> >>> On Saturday, 25 January 2014 05:59:06 UTC-5, horridohobbyist wrote: >>>> >>>> Never mind my last message. I'm still not sure it's being called. I >>>> need to investigate further. >>>> >>>> On Saturday, 25 January 2014 05:47:35 UTC-5, horridohobbyist wrote: >>>>> >>>>> Oh, it's called BEFORE the delete! That's why I was getting unexpected >>>>> results. >>>>> >>>>> I need to perform an action AFTER the delete. Is there a workaround? >>>>> >>>>> Thanks. >>>>> >>>>> On Saturday, 25 January 2014 01:00:25 UTC-5, Anthony wrote: >>>>>> >>>>>> Does the record actually get deleted from the database? If so, >>>>>> ondelete should be getting called right before the delete. You may need >>>>>> to >>>>>> show some code and explain what you're seeing and what you expect. Also, >>>>>> note that the ondelete code in .grid has changed in more recent >>>>>> versions, >>>>>> but should have worked in 2.4.2. >>>>>> >>>>>> Anthony >>>>>> >>>>>> On Friday, January 24, 2014 8:22:17 PM UTC-5, horridohobbyist wrote: >>>>>>> >>>>>>> I'm using Version 2.4.2. >>>>>>> >>>>>>> I'm finding that the ondelete function is never called when I delete >>>>>>> a record in SQLFORM.grid. Is this a bug, or am I doing something wrong? >>>>>>> The >>>>>>> onupdate function does get called when I update a record. >>>>>>> >>>>>>> Thanks. >>>>>>> >>>>>> -- 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 [email protected]. For more options, visit https://groups.google.com/groups/opt_out.

