Login

Newforms customs validators

Author:
baptiste
Posted:
March 18, 2007
Language:
Python
Version:
Pre .96
Tags:
newforms validators
Score:
0 (after 2 ratings)

How to proceed to add a custom validator to a newforms field : you just need to create a new class derivated from forms.YourField with a custom clean method. Do not forget the line super(UserField, self).clean(value) ; in our case, it verifies the field attributes : min_length, max_length or required.

More explications (in French) : des validateurs personnalisés pour Django

1
2
3
4
5
6
7
8
class UserField(forms.CharField):
    def clean(self, value):
        super(UserField, self).clean(value)
        try:
            User.objects.get(username=value)
            raise forms.ValidationError("Someone is already using this username. Please pick an other.")
        except User.DoesNotExist:
            return value

More like this

  1. newforms: Add field-specific error in form.clean() by miracle2k 8 years, 1 month ago
  2. AgreementField by chrisrbennett 7 years, 3 months ago
  3. SeparatedValuesField by jezdez 7 years, 9 months ago
  4. clean validation for dynamic form fields by leveillej 5 years, 3 months ago
  5. Newforms Validation of Credit Card Numbers by humphreymurray 7 years, 3 months ago

Comments

richardbarran (on March 22, 2007):

Hi,

This snippet contains a small bug, line 3 should be:

value = super(UserField, self).clean(value)

Reason:

The 'clean' method of the parent class - forms.Charfield - returns 'value' converted to a unicode string, however in the snippet this return value is ignored.

HTH,
Richard

PS It took me a while to understand why é and ô's were causing me a problem :-)

#

rahmcoff (on March 9, 2008):

Lines 6 and 7 should be swapped, and line 8 should be un-indented a level.

#

Please login first before commenting.