'Cleans all fields and raises a ValidationError containing message_dict
of all validation errors if any occur.'

def clean_fields(self, exclude=None):

    if (exclude is None):
        exclude = []
    errors = {}
    for f in self._meta.fields:
        if (f.name in exclude):
            continue
        raw_value = getattr(self, f.attname)
        if (f.blank and (raw_value in validators.EMPTY_VALUES)):
            continue
        try:
            setattr(self, f.attname, f.clean(raw_value, self))
        except ValidationError as e:
            errors[f.name] = e.messages
    if errors:
        raise ValidationError(errors)
