'Calls clean_fields, clean, and validate_unique, on the model,
and raises a ``ValidationError`` for any errors that occurred.'

def full_clean(self, exclude=None, validate_unique=True):

    errors = {}
    if (exclude is None):
        exclude = []
    try:
        self.clean_fields(exclude=exclude)
    except ValidationError as e:
        errors = e.update_error_dict(errors)
    try:
        self.clean()
    except ValidationError as e:
        errors = e.update_error_dict(errors)
    if validate_unique:
        for name in errors.keys():
            if ((name != NON_FIELD_ERRORS) and (name not in exclude)):
                exclude.append(name)
        try:
            self.validate_unique(exclude=exclude)
        except ValidationError as e:
            errors = e.update_error_dict(errors)
    if errors:
        raise ValidationError(errors)
