Hi all,
I have a form in which the allowed values of a particular field are
constrained by the value of another value in the field. I am using
server side validation of the values which is working OK. The problem I
have is that when a validation error occurs the resulting form displays
the error message against all widgets not just the two involved in the
validation. Perhaps some code would explain things better.
== controllers.py ==
import logging
import cherrypy
from cherrypy import HTTPRedirect
import turbogears
from turbogears import controllers, expose, validate, redirect,
error_handler
from turbogears import widgets as w
from turbogears import validators as v
log = logging.getLogger("form.controllers")
class my_validator(v.FormValidator):
__unpackargs__ = ('*', 'field_names')
messages = {
'my_error_message': 'This is my error message.',
}
def validate_python(self, value_dict, state):
# text2 must be twice text1.
if value_dict["text2"] != value_dict["text1"] * 2:
raise v.Invalid(self.message("my_error_message", None),
value_dict,
state)
# def _to_python(self, value_dict, state):
# vd = {}
# for i in self.field_names:
# vd[i] = value_dict[i]
# return vd
class my_schema(v.Schema):
chained_validators = [my_validator("text1", "text2")]
my_form = w.TableForm(
fields = [w.TextField(name="text1", label="Text 1",
validator=v.Int()),
w.TextField(name="text2", label="Text 2",
validator=v.Int()),
w.TextField(name="text3", label="Text 3",
validator=v.Int()),
],
validator = my_schema(),
action = 'save',
submit_text = "Submit")
class Root(controllers.RootController):
@expose(template="form.templates.form")
def index(self, tg_errors=None):
try:
my_errors = '\n'.join([(str(k) + ' ' + str(i)) for k, i in
tg_errors.items()])
except:
my_errors = tg_errors
return dict(form=my_form, my_errors=my_errors)
@expose()
@validate(form=my_form)
@error_handler(index)
def save(self, text1, text2, text3):
raise HTTPRedirect(turbogears.url("/"))
== form.kid ==
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:py="http://purl.org/kid/ns#"
py:extends="'master.kid'">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type"
py:replace="''"/>
</head>
<body>
${my_errors}
${form.display()}
</body>
</html>
Now the problem arises when I for instance enter 1, 4 and 3. The
resultant form is displayed with the string "This is my error message."
next to text1, text2 and text3. How do I control this to have the error
message next to just to text1 and text2?
Thanks in advanced.
Ben.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---