def bulk_delete(self, request, *args, **kwargs): """ Bulk delete instances """ xform = self.__validate_permission_on_bulk_action( request, 'change_xform') payload = self.__get_payload(request) postgres_query, mongo_query = self.__build_db_queries(xform, payload) # Delete Postgres & Mongo updated_records_count = Instance.objects.filter( **postgres_query).count() # Since Django 1.9, `.delete()` returns an dict with number of rows # deleted per object. # FixMe remove `.count()` query and use that dict instance Instance.objects.filter(**postgres_query).delete() ParsedInstance.bulk_delete(mongo_query) return Response( { 'detail': _('{} submissions have been deleted').format( updated_records_count) }, status.HTTP_200_OK)
def bulk_delete(self, request, *args, **kwargs): """ Bulk delete instances """ xform = self.get_object() postgres_query, mongo_query = self.__build_db_queries(xform, request.data) # Disconnect redundant parsed instance pre_delete signal pre_delete.disconnect(_remove_from_mongo, sender=ParsedInstance) # Delete Postgres & Mongo all_count, results = Instance.objects.filter(**postgres_query).delete() identifier = f'{Instance._meta.app_label}.Instance' deleted_records_count = results[identifier] ParsedInstance.bulk_delete(mongo_query) # Pre_delete signal needs to be re-enabled for parsed instance pre_delete.connect(_remove_from_mongo, sender=ParsedInstance) return Response({ 'detail': t('{} submissions have been deleted').format( deleted_records_count) }, status.HTTP_200_OK)