'Given a populated bundle, distill it and turn it back into
a full-fledged object instance.'

def full_hydrate(self, bundle):

    if (bundle.obj is None):
        bundle.obj = self._meta.object_class()
    bundle = self.hydrate(bundle)
    for (field_name, field_object) in self.fields.items():
        if (field_object.readonly is True):
            continue
        method = getattr(self, (u'hydrate_%s' % field_name), None)
        if method:
            bundle = method(bundle)
        if field_object.attribute:
            value = field_object.hydrate(bundle)
            if (isinstance(value, Bundle) and value.errors.get(field_name)):
                bundle.errors[field_name] = value.errors[field_name]
            if ((value is not None) or field_object.null):
                if (not field_object.is_related):
                    setattr(bundle.obj, field_object.attribute, value)
                elif (not field_object.is_m2m):
                    if (value is not None):
                        try:
                            setattr(bundle.obj, field_object.attribute, value.obj)
                        except (ValueError, ObjectDoesNotExist):
                            bundle.related_objects_to_save[field_object.attribute] = value.obj
                    elif field_object.null:
                        if (not isinstance(getattr(bundle.obj.__class__, field_object.attribute, None), ReverseOneToOneDescriptor)):
                            setattr(bundle.obj, field_object.attribute, value)
                    elif field_object.blank:
                        continue
    return bundle
