def METHOD_NAME(self, value, field, model_instance=None):
    """
    Clean the data ``value`` for the field.
    """
    field_type = field.get_internal_type()
    if field.name !='username' and field_type in ['CharField', 'EmailField',
                                                  'URLField', 'SlugField']:
        # if length is too long, truncate it. But not for username
        if len(value) > field.max_length:
            value = value[:field.max_length]
        if field.name == 'time_zone':
            if value not in pytz.all_timezones:
                timezone_map = {'AST': 'Canada/Atlantic',
                                 'EST': 'US/Eastern',
                                 'CST': 'US/Central',
                                 'MST': 'US/Mountain',
                                 'AKST': 'US/Alaska',
                                 'PST': 'US/Pacific',
                                 'GMT': 'UTC'
                                 }
                if value in timezone_map:
                    value = timezone_map[value]
                else:
                    value = None
    # set to None if it doesn't pass the validation
    try:
        if model_instance:
            value = field.clean(value, model_instance)
        else:
            value = field.to_python(value)
            field.run_validators(value)
    except exceptions.ValidationError:
        value = None
    return value