That makes sense; thanks. I guess I never looked at it that way. On Wednesday, September 26, 2012 2:02:41 PM UTC-6, Anthony wrote: > > When you build a form object in the controller, although you may make some > specifications that control its display, you are primarily defining a data > model for the form. The form object itself is not merely an HTML DOM > representation but also encapsulates the default and submitted values, > validators, CSRF token, etc. The form itself is ultimately serialized in > the view, and if you want something other than the default serialization, > you would handle that in the view as well (via form.custom or manually > created HTML markup). So, for the most part, true display-related aspects > of the form are generally handled in the view, and the controller (and > model for SQLFORMs) takes care of the data modeling and validation. > > Anthony > > On Wednesday, September 26, 2012 1:55:32 PM UTC-4, MichaelF wrote: >> >> I'm still struggling with the lines of control/authority/info-sharing >> between displaying/processing the data/form. (I realize not everyone agrees >> where these lines should be drawn, and even when drawn they're not >> necessarily "sharp, bright lines.") I like the idea of having the >> controller simply (!) get appropriate data and send it (say in a dict of >> lists of rows) to the view, which displays the data appropriately (in a >> form) and lets the controller process the form results >> (adding/updating/deleting records, etc.). The controller neither knows nor >> cares about the display of the data (but *does* need to know some of the >> form structure, so it will be able to know what to do with the data). The >> view needs to know what the data is, etc. >> >> But much of the code I see in the manual has the controller >> create/populate/process the form...and so then I wonder what the view is >> for. (I realize a page is usually more than just a form, and *that* is what >> the view is for.) I'd like for the controller not to have to create the >> form with all its fields. (This isn't a huge problem for me, but I *would* >> like to have the controller not create the form, if possible.) >> >> If I have a SQLFORM or CRUD, then the processing part is 'inside' the >> form processing, which is fine. But if I have a 'manual' form (meaning >> still using FORM and other helpers, but a non-SQLFORM, non-CRUD form), then >> the controller should process the posted data. >> >> As things exist now (by convention, I think), the controller creates the >> form and processes the results. Is there a prescribed way (convention, I >> guess) that would allow me to have the controller simply gather the data >> needed by a form (other than SQLFORM and CRUD), and yet be able to process >> the form but not build it? >> >> As the controller needs to process the form it needs to have a ref to the >> form object. I assume there's no easy way for the view to actually create >> the form and somehow tell the controller about it. So I'd have to do >> something like create a form object in the controller, then return that >> object (and related data). The form object would have NO items (input, >> checkbox, etc.). The view would add those items, essentially creating the >> 'stuff' that goes inside the form object. With this division of labor the >> controller still can process the form, and the view would essentially build >> it (really, update the form object the controller created). So, something >> like: >> >> #in controller file >> def my_stuff(): >> form = FORM() #note: pretty much an empty form >> if form.accepts(request, session): >> ... >> elif form.errors: >> ... >> else: >> data = db... >> >> # my_stuff.html VIEW >> {{# build the form, using the form obj created by the controller}} >> {{form.append(INPUT...)}} >> {{form.append(_type=SUBMIT...))}} >> {{=form}} >> >> 1. Is this possible? I suspect not, as the 'recreation' of the form >> in the controller on submission won't match what was submitted. >> 2. Is this recommended? >> 3. Am I just making things too involved (and should just create the >> form in the controller)? >> >> Thanks. >> >> On Wednesday, June 27, 2012 10:39:03 AM UTC-6, Anthony wrote: >>> >>> Follow the examples in the book. Most of the form handling (including >>> creation of the FORM/SQLFORM) object should be handled in the controller. >>> In the view, you can handle the display of the form, but web2py will give >>> you a default display if you just do: >>> >>> {{=form}} >>> >>> Anthony >>> >>> On Wednesday, June 27, 2012 7:08:19 AM UTC-4, Pedro Casalinho wrote: >>>> >>>> This may be a dumb question but, should forms be created in controllers >>>> and passed to the view or should they be created in the view, taking into >>>> consideration the MVC model >>> >>>
--