diff --git a/openstackclient/common/quota.py b/openstackclient/common/quota.py
index 37437344dc..71b8ea61f2 100644
--- a/openstackclient/common/quota.py
+++ b/openstackclient/common/quota.py
@@ -274,9 +274,18 @@ class ListQuota(command.Lister, BaseQuota):
         return parser
 
     def take_action(self, parsed_args):
-        projects = self.app.client_manager.identity.projects.list()
         result = []
-        project_ids = [getattr(p, 'id', '') for p in projects]
+        project_ids = []
+        if parsed_args.project is None:
+            for p in self.app.client_manager.identity.projects.list():
+                project_ids.append(getattr(p, 'id', ''))
+        else:
+            identity_client = self.app.client_manager.identity
+            project = utils.find_resource(
+                identity_client.projects,
+                parsed_args.project,
+            )
+            project_ids.append(getattr(project, 'id', ''))
 
         if parsed_args.compute:
             if parsed_args.detail:
diff --git a/openstackclient/tests/unit/common/test_quota.py b/openstackclient/tests/unit/common/test_quota.py
index bd59ca77fe..3fff062b4c 100644
--- a/openstackclient/tests/unit/common/test_quota.py
+++ b/openstackclient/tests/unit/common/test_quota.py
@@ -392,6 +392,29 @@ class TestQuotaList(TestQuota):
             parsed_args,
         )
 
+    def test_quota_list_compute_by_project(self):
+        # Two projects with non-default quotas
+        self.compute.quotas.get = mock.Mock(
+            side_effect=self.compute_quotas,
+        )
+
+        arglist = [
+            '--compute',
+            '--project', self.projects[0].name,
+        ]
+        verifylist = [
+            ('compute', True),
+            ('project', self.projects[0].name),
+        ]
+        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+        columns, data = self.cmd.take_action(parsed_args)
+        ret_quotas = list(data)
+
+        self.assertEqual(self.compute_column_header, columns)
+        self.assertEqual(self.compute_reference_data, ret_quotas[0])
+        self.assertEqual(1, len(ret_quotas))
+
     def test_quota_list_network(self):
         # Two projects with non-default quotas
         self.network.get_quota = mock.Mock(
@@ -461,6 +484,29 @@ class TestQuotaList(TestQuota):
         self.assertEqual(self.network_reference_data, ret_quotas[0])
         self.assertEqual(1, len(ret_quotas))
 
+    def test_quota_list_network_by_project(self):
+        # Two projects with non-default quotas
+        self.network.get_quota = mock.Mock(
+            side_effect=self.network_quotas,
+        )
+
+        arglist = [
+            '--network',
+            '--project', self.projects[0].name,
+        ]
+        verifylist = [
+            ('network', True),
+            ('project', self.projects[0].name),
+        ]
+        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+        columns, data = self.cmd.take_action(parsed_args)
+        ret_quotas = list(data)
+
+        self.assertEqual(self.network_column_header, columns)
+        self.assertEqual(self.network_reference_data, ret_quotas[0])
+        self.assertEqual(1, len(ret_quotas))
+
     def test_quota_list_volume(self):
         # Two projects with non-default quotas
         self.volume.quotas.get = mock.Mock(
@@ -530,6 +576,29 @@ class TestQuotaList(TestQuota):
         self.assertEqual(self.volume_reference_data, ret_quotas[0])
         self.assertEqual(1, len(ret_quotas))
 
+    def test_quota_list_volume_by_project(self):
+        # Two projects with non-default quotas
+        self.volume.quotas.get = mock.Mock(
+            side_effect=self.volume_quotas,
+        )
+
+        arglist = [
+            '--volume',
+            '--project', self.projects[0].name,
+        ]
+        verifylist = [
+            ('volume', True),
+            ('project', self.projects[0].name),
+        ]
+        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+        columns, data = self.cmd.take_action(parsed_args)
+        ret_quotas = list(data)
+
+        self.assertEqual(self.volume_column_header, columns)
+        self.assertEqual(self.volume_reference_data, ret_quotas[0])
+        self.assertEqual(1, len(ret_quotas))
+
 
 class TestQuotaSet(TestQuota):