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
>
>

-- 



Reply via email to