title: Field Level Validatiors Not triggering
body: <p>This is driving me crazy, but I feel like the solution must be really simple.</p>
  
  <p>In essence, I have 3 field level validators (the ones that are named "clean_", and not a single one of them is firing.  I fired up PDB and learned quite quickly that the methods are not getting added as attributes to my class at all (huhhh??). Here is what my code looks like (I lopped off 2 of the 3 cleans methods, but I'm still going to leave far more than necessary because I truly have no idea what's going on).</p>
  
  <pre><code>class SignupForm(forms.Form):
  
  username = forms.CharField(max_length=30,
                             widget=forms.TextInput(),
                             validators=[RegexValidator(regex=username_regex,
                                                        message='Please enter a username using only upper and lower case characters and numbers.',
                                                        code='username_regex_error',
                                                        ),
                                         ]
                             )
  
  password = forms.CharField(min_length=MIN_PASSWORD_LENGTH,
                             max_length=128,
                             widget=forms.PasswordInput(),
                             )
  
  email = forms.EmailField(required=True,
                           max_length=75,
                           widget=forms.EmailInput(),
                           )
  
  confirm = forms.EmailField(max_length=75,
                             widget=forms.EmailInput(),
                             required=True)
  
  def __init__(self, *args, **kwargs):
      super(SignupForm, self).__init__(*args, **kwargs)
      self.helper = FormHelper()
      self.helper.form_action = '.'  # Directs the form to the page we are currently on, which is crowdsurfer.com/registration/signup in this case
  
      self.helper.form_class = 'form-horizontal'
      self.helper.label_class = 'col-lg-2'
      self.helper.field_class = 'col-lg-6'
      self.helper.layout = Layout(
          Fieldset('Please Sign Up',
                   'username',
                   'password',
                   'email',
                   'confirm',
                   ),
          FormActions(Submit('save', 'Sign Up'))
      )
  
  def clean_password(self):
      password = self.cleaned_data['password']
      letters = set([char for char in password])
  
      if len(letters) == 1:
          raise forms.ValidationError('Password must contain more than 1 letter, number, or symbol', code="password")
      else:
          return password
  </code></pre>
  
  <p>Here is what we see in the Django.forms.forms.py</p>
  
  <pre><code>    def _clean_fields(self):
      import pdb
      pdb.set_trace()
      for name, field in self.fields.items():
          # value_from_datadict() gets the data from the data dictionaries.
          # Each widget type knows how to retrieve its own data, because some
          # widgets split data over several HTML fields.
          value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name))
          try:
              if isinstance(field, FileField):
                  initial = self.initial.get(name, field.initial)
                  value = field.clean(value, initial)
              else:
                  value = field.clean(value)
              self.cleaned_data[name] = value
              if hasattr(self, 'clean_%s' % name):
                  value = getattr(self, 'clean_%s' % name)()
                  self.cleaned_data[name] = value
          except ValidationError as e:
              self._errors[name] = self.error_class(e.messages)
              if name in self.cleaned_data:
                  del self.cleaned_data[name]
  </code></pre>
  
  <p>My code fails on this line: if hasattr(self, 'clean_%s' % name):</p>
  
  <p>weird... Sure enough, the attributes are absent from my form class:</p>
  
  <pre><code>(Pdb) dir(self)
  ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__ini
  t__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__s
  ubclasshook__', '__weakref__', '_changed_data', '_clean_fields', '_clean_form', '_errors', '_html_output', '_post_clean', '_raw_value', 'add_initial_prefix', 'a
  dd_prefix', 'as_p', 'as_table', 'as_ul', 'auto_id', 'base_fields', 'changed_data', 'clean', 'cleaned_data', 'data', 'empty_permitted', 'error_class', 'errors',
  'fields', 'files', 'full_clean', 'has_changed', 'helper', 'hidden_fields', 'initial', 'is_bound', 'is_multipart', 'is_valid', 'label_suffix', 'media', 'non_fiel
  d_errors', 'prefix', 'remember_me', 'visible_fields']
  </code></pre>
  
  <p>Does anyone have an idea what's going on?</p>