le 06.04.2009 05:41 chris_g a écrit:
> Hi,
>
> I am following the example for TurboGears 1.0 Unified Form Data
> Validation :
>
>     http://docs.turbogears.org/1.0/UnifiedControllers
>
> I've created a fairly complicated example where the same method
> handles an add & edit form using TurboGears 1.0.7 & FormEncode 1.0.1 .
>
> The form layout is dynamic, it depends on user permission and workflow
> state to determine the fields that are present and if they are
> editable etc.
>
> I am finding I can add an entry if there are no form validation erros
> in the form data, but my form falls over when I try to render the form
> for correction because the form is getting an internal error from
> the validation error.
>
>   
When you are rendering an existing data set, do you pass only the id or 
use kw ?

If there are no kw params, you should not go through the if kw: part and 
render the form... But if you use kw you will trigger the 
get_errors(...) and eventually render the form too with tg_errors added 
to the return dict.

Are you sure the issue is not in your form definition or the "params" 
you pass when in the last "else: # no data posted..." I would look there 
first.
>     @expose(template="webordering.templates.order_form")
>     @identity.require(identity.not_anonymous())
>     def index(self, id='', tg_errors=None, *args, **kw):
>
>         plu_classes, plu_classes_data, maxOrderLines, pluClassNum =
> self._get_plu_classes()
>
>         displayBlankPlu = True
>         user = identity.current.user
>         group_names = [g.group_name for g in
> identity.current.user.groups]
>         id = id or kw.get('id','')
>         if id:
>             mode, displayBlankPlu, status_code =
> self._get_display_options(id, user, group_names)
>
>         if kw:
>             # form data has been posted.
>             if id:
>                 # edit an existing order
>                 form_args = dict(mode=mode, status_code=form_data
> ['status_code'], outerRepetitions=pluClassNum,
> innerRepetitions=maxOrderLines)
>                 form =  get_order_form(**form_args)
>             else:
>                 # add a new order.
>                 store_id = kw.get('store_id', None)
>                 store_options = self._get_store_options(store_id,
> user)
>                 form_args = dict(mode='add', status_code='PEND',
> store_options=store_options, outerRepetitions=pluClassNum,
> innerRepetitions=maxOrderLines)
>                 form = get_order_form(**form_args)
>
>             @validate(form=form)
>             def get_errors(self, tg_errors=None, **data):
>                 log.info('OrderController.index.get_errors data=
> %r'%data)
>                 return tg_errors, data
>
>             tg_errors, form_data = get_errors(self, **kw)
>
>             # errors = [(param,inv) for param, inv in tg_errors.items
> ()]
>             if not tg_errors:
>                 # Perform some action with the data in **data.  **kw
> still contains the raw data.
>                 flash_message, oh = self._process(*args, **form_data)
>                 flash(flash_message)
>                 redirect(oh.get_url().replace('/order',''))
>
>             else:
>                 if id:
>                     flash("Errors were encountered.")
>                     params = self._edit(plu_classes_data, mode, id,
> form_data, displayBlankPlu, *args, **kw)
>                 else:
>                     flash("Errors were encountered.")
>                     params = self._add(plu_classes_data, form_data,
> displayBlankPlu, *args, **kw)
>                 params['template'] =
> 'webordering.templates.order_form'
>
>         else:
>             # no data posted
>             form_data = None
>             if id:
>                 # edit - retrieve record from database.
>                 params = self._edit(plu_classes_data, mode, id,
> form_data, displayBlankPlu, *args, **kw)
>             else:
>                 # new - enter blank form.
>                 params = self._add(plu_classes_data, form_data,
> displayBlankPlu, *args, **kw)
>                 log.info('OrderController.index -> else: type=%r'%type
> (params))
>             if 'makeInvoiceURL' not in params:
>                 params['makeInvoiceURL'] = False
>         params.update(get_sidebars())
>         return params
>
>
>
>
> 500 Internal error
>
> The server encountered an unexpected condition which prevented it from
> fulfilling the request.
>
> Page handler: <bound method OrderController.index of
> <webordering.controllers.OrderController object at 0xb745096c>>
> Traceback (most recent call last):
>   File "/usr/local/lib/python2.4/site-packages/CherryPy-2.3.0-
> py2.4.egg/cherrypy/_cphttptools.py", line 121, in _run
>     self.main()
>   File "/usr/local/lib/python2.4/site-packages/CherryPy-2.3.0-
> py2.4.egg/cherrypy/_cphttptools.py", line 264, in main
>     body = page_handler(*virtual_path, **self.params)
>   File "<string>", line 3, in index
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/controllers.py", line 358, in expose
>     output = database.run_with_transaction(
>   File "<string>", line 5, in run_with_transaction
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/database.py", line 407, in sa_rwt
>     retval = func(*args, **kw)
>   File "<string>", line 5, in _expose
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/controllers.py", line 373, in <lambda>
>     mapping, fragment, args, kw)))
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/controllers.py", line 423, in _execute_func
>     return _process_output(output, template, format, content_type,
> mapping, fragment)
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/controllers.py", line 88, in _process_output
>     fragment=fragment)
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/view/base.py", line 161, in render
>     return engine.render(**kw)
>   File "/usr/local/lib/python2.4/site-packages/TurboKid-1.0.4-
> py2.4.egg/turbokid/kidsupport.py", line 206, in render
>     output=output, format=format)
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> __init__.py", line 301, in serialize
>     raise_template_error(module=self.__module__)
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> __init__.py", line 299, in serialize
>     return serializer.serialize(self, encoding, fragment, format)
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> serialization.py", line 107, in serialize
>     text = ''.join(self.generate(stream, encoding, fragment, format))
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> serialization.py", line 629, in generate
>     for ev, item in self.apply_filters(stream, format):
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> serialization.py", line 165, in format_stream
>     for ev, item in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 221, in _coalesce
>     for ev, item in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> serialization.py", line 477, in inject_meta_tags
>     for ev, item in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
>     for p in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> filter.py", line 41, in apply_matches
>     templates[:i] + templates[i+1:], apply_func):
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> filter.py", line 41, in apply_matches
>     templates[:i] + templates[i+1:], apply_func):
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> filter.py", line 26, in apply_matches
>     for ev, item in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
>     for p in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 221, in _coalesce
>     for ev, item in stream:
>   File "/home/chris/sup1/WebOrdering/webordering/templates/
> order_form.py", line 56, in _match_func
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/meta.py", line 110, in lockwidget
>     output = self.__class__.display(self, *args, **kw)
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/base.py", line 387, in display
>     return super(CompoundWidget, self).display(value, **params)
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 52, in _update_path
>     returnval = func(self, *args, **kw)
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 237, in display
>     return super(InputWidget, self).display(value, **params)
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/base.py", line 294, in display
>     return transform(params, self.template_c)
>   File "/usr/local/lib/python2.4/site-packages/TurboKid-1.0.4-
> py2.4.egg/turbokid/kidsupport.py", line 220, in transform
>     return kid.ElementStream(t.transform()).expand()
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 108, in expand
>     for ev, item in self._iter:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
>     for p in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
>     for p in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> filter.py", line 26, in apply_matches
>     for ev, item in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
>     for p in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 221, in _coalesce
>     for ev, item in stream:
>   File "<string>", line 85, in _pull
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/meta.py", line 110, in lockwidget
>     output = self.__class__.display(self, *args, **kw)
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/base.py", line 387, in display
>     return super(CompoundWidget, self).display(value, **params)
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 52, in _update_path
>     returnval = func(self, *args, **kw)
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 237, in display
>     return super(InputWidget, self).display(value, **params)
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/base.py", line 294, in display
>     return transform(params, self.template_c)
>   File "/usr/local/lib/python2.4/site-packages/TurboKid-1.0.4-
> py2.4.egg/turbokid/kidsupport.py", line 220, in transform
>     return kid.ElementStream(t.transform()).expand()
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 108, in expand
>     for ev, item in self._iter:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
>     for p in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
>     for p in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> filter.py", line 26, in apply_matches
>     for ev, item in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
>     for p in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 221, in _coalesce
>     for ev, item in stream:
>   File "<string>", line 92, in _pull
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/base.py", line 387, in display
>     return super(CompoundWidget, self).display(value, **params)
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 52, in _update_path
>     returnval = func(self, *args, **kw)
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 237, in display
>     return super(InputWidget, self).display(value, **params)
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/base.py", line 294, in display
>     return transform(params, self.template_c)
>   File "/usr/local/lib/python2.4/site-packages/TurboKid-1.0.4-
> py2.4.egg/turbokid/kidsupport.py", line 220, in transform
>     return kid.ElementStream(t.transform()).expand()
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 108, in expand
>     for ev, item in self._iter:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
>     for p in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
>     for p in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> filter.py", line 26, in apply_matches
>     for ev, item in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
>     for p in stream:
>   File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 221, in _coalesce
>     for ev, item in stream:
>   File "<string>", line 104, in _pull
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 52, in _update_path
>     returnval = func(self, *args, **kw)
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 237, in display
>     return super(InputWidget, self).display(value, **params)
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/base.py", line 280, in display
>     params["value"] = to_unicode(self.adjust_value(value, **params))
>   File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 233, in adjust_value
>     value = self.validator.from_python(value)
>   File "/usr/local/lib/python2.4/site-packages/FormEncode-1.0.1-
> py2.4.egg/formencode/api.py", line 418, in from_python
>     value = self._from_python(value, state)
>   File "/usr/local/lib/python2.4/site-packages/FormEncode-1.0.1-
> py2.4.egg/formencode/validators.py", line 948, in _to_python
>     value, state)
> Invalid: Please enter an integer value
> Error location in template file '/home/chris/sup1/WebOrdering/
> webordering/templates/order_form.kid'
> between line 10, column 4 and line 11, column 4:
>     <p py:content="form.display(value=form_data,
> repetitions=repetitions, f ...
>
> Powered by CherryPy 2.3.0
>
>
> >
>   

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