I have a simple resource that I would like perform a DELETE. On success I would like to get the ID of the object that was deleted. As per the docs, always_return_data
you do not need to return the deleted object. You can just update the bundle.obj in obj_delete and then return it to the delete_detail. I am using custom resources and a middleware to run the api, but if you skip on the meta-model thingy it is pretty straight forward.
def obj_delete(self,bundle, **kwargs):
self.load_user_obj(bundle.request)
l_instanceId = kwargs['pk']
try:
#load the instance
self.m_objMetaModel.load(l_instanceId,True)
#do the manipulation on it
self.m_objMetaModel.REST_IMPL.delete()
#get an instance back. In my case in the delete I
#am creating a virtual instance- just an object that
#fits the other parts of the api
bundle.obj = self.m_objMetaModel.instance
#load the bundle manually
self.m_objMetaModel.REST_IMPL.reload_data(bundle.obj,bundle.data)
return bundle
except Exception as e:
print(e)
def delete_detail(self, request, **kwargs):
bundle = Bundle(request=request)
try:
# perform the operation returning the recreated bundle
deleted_bundle = self.obj_delete(bundle=bundle,
**self.remove_api_resource_names(kwargs))
# keep the meta configuration, just to avoid surprises later
if not self._meta.always_return_data:
return http.HttpNoContent()
else:
#update the bundle, you can skip on the dehydrate if you
#are loading the bundle data manually
deleted_bundle = self.full_dehydrate(deleted_bundle)
deleted_bundle = self.alter_detail_data_to_serialize(request,
deleted_bundle)
return self.create_response(request, deleted_bundle)
except NotFound:
return http.HttpNotFound()