Tastypie return data from DELETE requests?

前端 未结 2 1368
离开以前
离开以前 2021-01-25 12:21

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

2条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2021-01-25 12:37

    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()
    
    

提交回复
热议问题