Django custom field validator vs. clean Django custom field validator vs. clean django django

Django custom field validator vs. clean


Validators only validate, they don't return the improved format;Clean methods both validate and return a (sometimes amended) value.

I think the way to go here is to just use a DateField with a validator as a inherited class of DateField with a default_validators set.

import datetimefrom django.core import exceptionsfrom django.db import modelsfrom django.utils.translation import ugettext_lazy as _def validate_date_today_or_later(value):    'Place this in validators.py and import it to keep your model a bit cleaner'    if value < datetime.date.today():        raise exceptions.ValidationError(_('Date must be today or later'))class TodayOrLaterDateField(models.DateField):    default_validators = [validate_date_today_or_later,]

edit:You can apply the same validator to your form fields as well if you just want it there and not in your whole app.


You can extend models.DateField and override to_python method. Didn't tested on Django 1.3 but should work.

import datetimefrom django.core import exceptionsfrom django.db import modelsclass TodayOrLaterDateField(models.DateField):    def to_python(self, value):        value = super(TodayOrLaterDateField, self).to_python(value)        if value < datetime.date.today():            raise exceptions.ValidationError(u'Date must be today or later')        return value