I seem to have a problem there. It returns None. However, I think I may have figured out a solution. I've managed to update the current day 'rating' & 'complete' fields and also the 'complete' field of the next day (making it current). Let me know if you see any problems with the way I ended up doing this... Here is the code:
*Controller:* def workouts(): r = db(db.workouts.complete == 1).select().first() #select current day form = SQLFORM(db.workouts, r, showid=False).process() #create form to update 'rating' if form.accepted: r2 = db(db.workouts.complete == 2).select().first() #select next day r.update_record(complete=0) #update current day r2.update_record(complete=1) #update next day response.flash = 'record updated' elif form.errors: response.flash = 'form has errors' rows = db(db.workouts).select() return locals() As far as I can tell it seems to work how I want it to. You've been more than helpful, Massimo. Thanks, again! On Monday, August 11, 2014 12:10:59 PM UTC-4, Massimo Di Pierro wrote: > > Try print/log the value of r in your code. Perhaps do a {{=r}} and see if > there record you are trying to edit is there. > > On Sunday, 10 August 2014 15:57:02 UTC-5, Drew Howell wrote: >> >> It's still creating a new record rather than updating. So I've still got >> something wrong. I need to look over the code and see if I can find >> anything that sticks out. >> >> On Sunday, August 10, 2014 4:07:57 PM UTC-4, Massimo Di Pierro wrote: >>> >>> I agree that you only seem to need one form. If this is the case there >>> should not be problems. Can you confirm? >>> >>> Massimo >>> >>> On Sunday, 10 August 2014 12:58:06 UTC-5, Drew Howell wrote: >>>> >>>> The purpose of the app/page is to track progress of a workout routine. >>>> It is a 5 week / 35 day schedule. I have all the "static" information >>>> stored in the table (Day, Week, Workout Name), but there are 2 other >>>> fields >>>> in the table that would need to be updated: "rating" which is where you >>>> rate your performance (1-4) entered via radio buttons, and "completed" >>>> which can be either 0, 1, or 2 (0=complete, 1=current, 2=locked) and is >>>> automatically changed to 0 when the form is submitted. >>>> >>>> I am generating the page by iterating through the records in the table >>>> and displaying them (see here for example >>>> <https://drewhowell.pythonanywhere.com/TwoFiveTracker/default/workouts.html>). >>>> >>>> I realize now that I really only need 1 form, which is for the current >>>> day. >>>> The user will select a radio button and click submit. It should then >>>> update >>>> the "rating" field as well as the "completed" field. After the form is >>>> submitted the page is generated again, but the next day will be the >>>> "current" day with the form. I apologize if that's confusing, but the best >>>> way to understand it is looking at the example >>>> <https://drewhowell.pythonanywhere.com/TwoFiveTracker/default/workouts.html> >>>> . >>>> >>>> This is what I'm doing in my workouts.html View: >>>> >>>> {{for row in rows:}} >>>> {{if row.complete == 0:}} >>>> // completed day layout >>>> {{elif row.complete == 1:}} >>>> // current day layout >>>> {{=form}} >>>> {{else:}} >>>> ///locked day layout >>>> {{pass}} >>>> {{pass}} >>>> >>>> >>>> On Sunday, August 10, 2014 1:27:17 PM UTC-4, Massimo Di Pierro wrote: >>>>> >>>>> That's it then. You cannot have multiple forms on the same type on one >>>>> page unless they refer to different tables. There are other ways but it >>>>> really depends on what you are trying to do. Can you explain in words >>>>> what >>>>> is the page supposed to do. >>>>> >>>>> >>>>> On Sunday, 10 August 2014 11:11:05 UTC-5, Drew Howell wrote: >>>>>> >>>>>> I made the changes and switched to using {{=form}}, but It's still >>>>>> creating a new record. I just realized I didn't post a part of the view >>>>>> that might be causing the issue. I have multiple forms on a single page. >>>>>> >>>>>> ... >>>>>> >>>>>> {{=for row in rows:}} >>>>>> >>>>>> {{=form}} >>>>>> >>>>>> {{pass}} >>>>>> >>>>>> ... >>>>>> >>>>>> Could that be causing the issue? I went ahead and uploaded what I >>>>>> have to Python Anywhere to help illustrate what I'm trying to do. You >>>>>> can check >>>>>> it out here >>>>>> <https://drewhowell.pythonanywhere.com/TwoFiveTracker/default/workouts> >>>>>> (the >>>>>> layout is slightly broken because of the vertical radio buttons, but >>>>>> that >>>>>> will be fixed next). >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Saturday, August 9, 2014 10:33:02 PM UTC-4, Massimo Di Pierro >>>>>> wrote: >>>>>>> >>>>>>> One problem is that you want to select after you process the form: >>>>>>> >>>>>>> def workouts(): >>>>>>> r = db.workouts(request.args(0)) >>>>>>> form = SQLFORM(db.workouts, r).process() >>>>>>> >>>>>>> if form.accepted: >>>>>>> response.flash = 'form accepted' >>>>>>> elif form.errors: >>>>>>> response.flash = 'form has errors' >>>>>>> >>>>>>> rows = db(db.workouts).select() >>>>>>> return locals() >>>>>>> >>>>>>> Also instead of using a custom form (unless you really need one), I >>>>>>> suggest you do {{=form}} in view and >>>>>>> >>>>>>> make the fields that you do not need in the form Field(..., >>>>>>> readable=False, writable=False) >>>>>>> >>>>>>> On Saturday, 9 August 2014 20:01:51 UTC-5, Drew Howell wrote: >>>>>>>> >>>>>>>> I'm new to Web2Py, so I am creating a (what I thought was a) simple >>>>>>>> app that tracks progress of a workout routine. I have a database >>>>>>>> (db.workouts) that has information such as Workout Name, Rating, >>>>>>>> Completed, >>>>>>>> etc. I have 2 fields(rating, completed) I would like to update via a >>>>>>>> form. >>>>>>>> I have tried a couple different methods, but can't seem to get >>>>>>>> anything to >>>>>>>> work correctly. The other fields are already entered in the table and >>>>>>>> should not be changed. >>>>>>>> >>>>>>>> "Rating" should be updated by a set of radio buttons and >>>>>>>> "Completed" should be set to 0 when the form is submitted (0=complete, >>>>>>>> 1=current, 2=locked). I have created the form, but have done something >>>>>>>> wrong because, when it is submitted, a new record is created rather >>>>>>>> than >>>>>>>> updating the existing one. >>>>>>>> >>>>>>>> *Here is my code:* >>>>>>>> >>>>>>>> *Model:* >>>>>>>> >>>>>>>> db.define_table('workouts', >>>>>>>> Field('stage'), >>>>>>>> Field('w', type="integer"), >>>>>>>> Field('workout'), >>>>>>>> Field('complete', type="integer"), >>>>>>>> Field('d', type="integer"), >>>>>>>> Field('rating', requires=IS_IN_SET([1, 2, 3, 4 ]), >>>>>>>> widget=SQLFORM.widgets.radio.widget), >>>>>>>> auth.signature >>>>>>>> ) >>>>>>>> >>>>>>>> *Controller:* >>>>>>>> >>>>>>>> def workouts(): >>>>>>>> rows = db(db.workouts).select() >>>>>>>> >>>>>>>> r = db.workouts(request.args(0)) >>>>>>>> form = SQLFORM(db.workouts, r) >>>>>>>> >>>>>>>> if form.process().accepted: >>>>>>>> response.flash = 'form accepted' >>>>>>>> elif form.errors: >>>>>>>> response.flash = 'form has errors' >>>>>>>> >>>>>>>> return locals() >>>>>>>> >>>>>>>> *View:* >>>>>>>> >>>>>>>> ... >>>>>>>> >>>>>>>> {{=form.custom.begin}} >>>>>>>> {{=form.custom.widget.rating}} >>>>>>>> {{=form.custom.submit}} >>>>>>>> {{=form.custom.end}} >>>>>>>> >>>>>>>> ... >>>>>>>> >>>>>>>> >>>>>>>> As I mentioned earlier, I am new and I may be going about this >>>>>>>> completely the wrong way. So any help would be greatly appreciated. I >>>>>>>> can >>>>>>>> provide more information if needed. 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 web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.