It took me a short while as well to figure out how it works. The
problem is that you need an _instance_ of the form in your class that
you can pass to to the @validate decorator, a class def as shown in
some of the tutorials is not enough. This also means that you cannot
set values in the form within the script, but there is a very easy and
handy way to do that in the template. I'll post a code snippet later
today.

On 13 jun, 08:43, "Tjaart de Beer" <[EMAIL PROTECTED]> wrote:
> Hi
>
> I have a problem with form validation not working. Here is the setup.
>
> I have generic methods in controllers.py called view and model_view.
> The appropriate method (either method X which displays the form, or
> method Y which handles the form input) located in a sub_controllers.py
> is then decided on by dispatch.
>
> Here is my code for the form:
>
> class ModellingFields(widgets.WidgetsList):
>     template = widgets.TextField(validator = validators.NotEmpty(),
> label = "Template")
>     target = widgets.TextField(validator = validators.NotEmpty(),
> label = "Target")
>     program = widgets.TextField(validator = validators.NotEmpty(),
> label = "program:")
>
> form = widgets.TableForm(fields = ModellingFields(),submit_text = "Submit")
>
> Method X which displays the form:
>
> @generics.view.when("viewtype.startswith('modelling')")
> def X(sid,viewtype,tg_errors=None):
>
>     if tg_errors:
>         print tg_errors, "********************************************"
>     submit_action = "model_view?viewtype=modelling_result"
>     return 
> dict(tg_template=".templates.modelling",sid=sid,form=modelling_form,
> action=submit_action,tg_errors=tg_errors)
>
> Method Y which should handle the validation and if correct proceed:
>
> @validate(form=modelling_form)
> @error_handler(X)
> @generics.model_view.when("viewtype == 'modelling_result'")
> def Y(viewtype, target, template, program,**kwargs):
>     result = modelling.modelling(target, template, program)
>     return dict(tg_template=".templates.modelling_results", result = result)
>
> Code for the generic function which dispatches it:
>
>     @expose()
>     def view(self, sid="",viewtype=""):
>         try:
>             return generics.view(sid,viewtype)
>         except dispatch.interfaces.NoApplicableMethods:
>             return dict(tg_template=".templates.missing_record",sid=sid)
>
>     @expose()
>     def model_view(self, viewtype, target, program, template):
>         try:
>             return generics.model_view(viewtype, target, template, program)
>         except dispatch.interfaces.NoApplicableMethods:
>             return dict(tg_template=".templates.missing_record",sid="")
>
> I followed the example in the Turbogears book as well as numerous
> tutorials on the web but I simply do not get any validation. I just
> want the same form to be redisplayed if one of the fields are empty
> and a warning next to the form.
>
> Is the problem because I use dispatch?
>
> Any help would be appreciated. Thanks!
> --
> Tjaart de Beer


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to