Yuka and Shawn - Thanks very much for your help!  Overriding
_clean_fields() does satisfy the requirements (including the dynamic
fields).

Rick



On Apr 14, 2:54 pm, Yuka Poppe <y...@xs4all.nl> wrote:
> Rick, as a followup;
>
> You also mentioned dynamicly adding fields in __init__, if you also
> want to return validation errors, you're better off overriding
> _clean_fields() instead of full_clean(). Taking all requirements into
> account (processing self.data before any fields are cleaned being the
> most important), I think you are looking for something that goes
> somewhat like this:
>
> class MyForm(Form):
>     def _clean_fields(self):
>         for name, field in self.fields.items():
>             prefixed_name = self.add_prefix(name)
>             data_value = self.data.get(prefixed_name, None)
>             if something_or_other:
>                 self.data[prefixed_name] = .. processed data_value ..
>             else:
>                 self._errors[name] = self.error_class('something went wrong')
>         super(MyForm, self)._clean_fields()
>
> If I understood you correctly, you should be able to shape this
> according to your needs just fine.
>
> Yuka
>
>
>
>
>
>
>
> On Thu, Apr 14, 2011 at 8:48 PM, Yuka Poppe <y...@xs4all.nl> wrote:
> > Hi Rick,
>
> > Ok, I did a quick skim over the BaseForm; Validation is called by the
> > method is_valid(), which inturn accesses the property self.errors --
> > And thus _get_errors() which calls self.full_clean()
>
> > full_clean() is responsible for calling the clean method on all
> > associated fields, and populating self.cleaned_data. If errors pop up,
> > cleaned_data is cleared.
>
> > Shawn is correct, you can manipulate self.data right from the
> > __init__() method, as long as you make sure you dont touch
> > self.is_valid() or self.errors.
>
> > However, I would opt to override full_clean() and perform your
> > wizardry at self.data there, before calling the parent method; It has
> > the added benefit that you are closer to the point where the form
> > wants to validate its data, and its thus more trivial to populate the
> > error dict with usefull messages for whoever is filling out your form
> > -- if something goes wrong, you want your users to be aware, and this
> > way you can patch right into the existing validation cycle.
>
> > Hope I'm making some sense,
>
> > Yuka
>
> > On Thu, Apr 14, 2011 at 8:18 PM, ricksteu <rick_s...@yahoo.com> wrote:
> >> Hi Yuka - We do want to do the cleaning at the form level, basically
> >> because we don't want to use a CharField subclass in all places on all
> >> of our forms.    You're right, there are two methods that can be
> >> overridden: clean() and full_clean().  clean() occurs too late.  I
> >> think using full_clean() is possible, but it seems like I have to jump
> >> through several hoops to make it work.  And just I'm looking for a
> >> simpler solution.
>
> >> Thanks,
> >> Rick
>
> >> On Apr 14, 12:16 pm, Yuka Poppe <y...@xs4all.nl> wrote:
> >>> On Thu, Apr 14, 2011 at 5:32 AM, ricksteu <rick_s...@yahoo.com> wrote:
>
> >>> > Hello -
>
> >>> > I am looking for a straightforward way to alter posted form data prior
> >>> > to when the form's full_clean() method is called.  Specifically, I
> >>> > need to strip whitespace from any string data (such as for
> >>> > CharFields), and this needs to be done prior to when the individual
> >>> > fields' clean methods are called.
>
> >>> Maybe I'm a bit confused, but is it not the fields cleanup method that
> >>> would be responsible for actually cleaning up its data, besides
> >>> validating?
>
> >>> If you really must clean it before that, the best way indeed seems to
> >>> extend the form and overload its clean method, im not sure wich one,
> >>> there's two to look at, I recall the one was more convenient to use
> >>> then the other, as it simply just called the other method. It is
> >>> indeed responsible for calling the clean method on its fields if I'm
> >>> not mistaken, so thats the route I would choose in this case.
>
> >>> Also yes, you could make a copy of the POST data, modify that and pass
> >>> it to the form constructor, but as you mentioned that doesnt seem very
> >>> nice way to handle things.
>
> >>> Hope this is of some assistance.
>
> >>> --
> >>> Regards, Yuka
>
> >> --
> >> You received this message because you are subscribed to the Google Groups 
> >> "Django users" group.
> >> To post to this group, send email to django-users@googlegroups.com.
> >> To unsubscribe from this group, send email to 
> >> django-users+unsubscr...@googlegroups.com.
> >> For more options, visit this group 
> >> athttp://groups.google.com/group/django-users?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to