We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Issue when attempting to sync tiered Price Model in 2.4.2
**Describe the bug**

It looks like 9bd896ffd944e809b95abae884a2149dc8a79f27 introduced a regression when trying to sync a tiered Price model. Probably Price is not the only model affected.

Check out this trace:

```
$ ./manage.py djstripe_sync_models Price
Syncing Price:
INFO     stripe.log_info:64- message='Request to Stripe api' method=get path=https://api.stripe.com/v1/prices?expand[0]=data.tiers
INFO     stripe.log_info:64- message='Stripe API response' path=https://api.stripe.com/v1/prices?expand[0]=data.tiers response_code=200
  id=price_1IFltoFz0jfFqjGsm5fbXWt5, pk=6 (xxx)
  id=price_1IFe29Fz0jfFqjGsTpBrPQql, pk=1 (xxx)
  id=price_1IFe29Fz0jfFqjGslZM7rvu1, pk=2 (xxx)
  id=price_1IFe28Fz0jfFqjGsM0SIOAa6, pk=3 (xxx)
  id=price_1IFe27Fz0jfFqjGsEN4c0MxR, pk=4 (xxx)
  id=price_1IFe23Fz0jfFqjGsbFrlPDSi, pk=5 (xxx)
INFO     stripe.log_info:64- message='Request to Stripe api' method=get path=https://api.stripe.com/v1/prices
INFO     stripe.log_info:64- message='Stripe API response' path=https://api.stripe.com/v1/prices response_code=200
  id=price_1IFltoFz0jfFqjGsm5fbXWt5, pk=6 (xxx)
  id=price_1IFe29Fz0jfFqjGsTpBrPQql, pk=1 (xxx)
  id=price_1IFe29Fz0jfFqjGslZM7rvu1, pk=2 (xxx)
  id=price_1IFe28Fz0jfFqjGsM0SIOAa6, pk=3 (xxx)
  id=price_1IFe27Fz0jfFqjGsEN4c0MxR, pk=4 (xxx)
  id=price_1IFe23Fz0jfFqjGsbFrlPDSi, pk=5 (xxx)
  Synced 12 Price
```

The Price objects are synced twice. The first time with the tiers attribute expanded and the second time without expanding it and overwriting it, so the final object doesn't include tiers.

**Software versions**
- dj-stripe version: 2.4.2
- Python version: 3.7
- Django version: 3.0.11
- Stripe API version: 2.55
- Database type and version: postgresql 10.10

**Steps To Reproduce**

1. Create tiered Price and add tiers in Stripe Dashboard
2. Sync Price models with manage command

**Can you reproduce the issue with the latest version of master?**

Yes, both 2.4.2 and master are affected (2.4.1 is not affected)

**Expected Behavior**

The Price Model should have the tiers JSONField object populated.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `djstripe/management/commands/djstripe_sync_models.py`
Content:
```
1 from typing import List
2 
3 from django.apps import apps
4 from django.core.management.base import BaseCommand, CommandError
5 
6 from ... import models, settings
7 
8 
9 class Command(BaseCommand):
10     """Sync models from stripe."""
11 
12     help = "Sync models from stripe."
13 
14     def add_arguments(self, parser):
15         parser.add_argument(
16             "args",
17             metavar="ModelName",
18             nargs="*",
19             help="restricts sync to these model names (default is to sync all "
20             "supported models)",
21         )
22 
23     def handle(self, *args, **options):
24         app_label = "djstripe"
25         app_config = apps.get_app_config(app_label)
26         model_list = []  # type: List[models.StripeModel]
27 
28         if args:
29             for model_label in args:
30                 try:
31                     model = app_config.get_model(model_label)
32                 except LookupError:
33                     raise CommandError(
34                         "Unknown model: {}.{}".format(app_label, model_label)
35                     )
36 
37                 model_list.append(model)
38         else:
39             model_list = app_config.get_models()
40 
41         for model in model_list:
42             self.sync_model(model)
43 
44     def _should_sync_model(self, model):
45         if not issubclass(model, models.StripeModel):
46             return False, "not a StripeModel"
47 
48         if model.stripe_class is None:
49             return False, "no stripe_class"
50 
51         if not hasattr(model.stripe_class, "list"):
52             return False, "no stripe_class.list"
53 
54         if model is models.UpcomingInvoice:
55             return False, "Upcoming Invoices are virtual only"
56 
57         if not settings.STRIPE_LIVE_MODE:
58             if model is models.ScheduledQueryRun:
59                 return False, "only available in live mode"
60 
61         return True, ""
62 
63     def sync_model(self, model):
64         model_name = model.__name__
65 
66         should_sync, reason = self._should_sync_model(model)
67         if not should_sync:
68             self.stdout.write(f"Skipping {model}: {reason}")
69             return
70 
71         self.stdout.write("Syncing {}:".format(model_name))
72 
73         count = 0
74         for list_kwargs in self.get_list_kwargs(model):
75             try:
76                 if model is models.Account:
77                     # special case, since own account isn't returned by Account.api_list
78                     stripe_obj = models.Account.stripe_class.retrieve(
79                         api_key=settings.STRIPE_SECRET_KEY
80                     )
81                     count += 1
82                     djstripe_obj = model.sync_from_stripe_data(stripe_obj)
83                     self.stdout.write(
84                         "  id={id}, pk={pk} ({djstripe_obj})".format(
85                             id=djstripe_obj.id,
86                             pk=djstripe_obj.pk,
87                             djstripe_obj=djstripe_obj,
88                         )
89                     )
90 
91                 for stripe_obj in model.api_list(**list_kwargs):
92                     count += 1
93                     djstripe_obj = model.sync_from_stripe_data(stripe_obj)
94                     self.stdout.write(
95                         "  id={id}, pk={pk} ({djstripe_obj})".format(
96                             id=djstripe_obj.id,
97                             pk=djstripe_obj.pk,
98                             djstripe_obj=djstripe_obj,
99                         )
100                     )
101 
102             except Exception as e:
103                 self.stderr.write(str(e))
104 
105         if count == 0:
106             self.stdout.write("  (no results)")
107         else:
108             self.stdout.write(
109                 "  Synced {count} {model_name}".format(
110                     count=count, model_name=model_name
111                 )
112             )
113 
114     def get_list_kwargs(self, model):
115         """
116         Returns a sequence of kwargs dicts to pass to model.api_list
117 
118         This allows us to sync models that require parameters to api_list
119 
120         :param model:
121         :return: Sequence[dict]
122         """
123         all_list_kwargs = (
124             [{"expand": [f"data.{k}" for k in model.expand_fields]}]
125             if model.expand_fields
126             else []
127         )
128         if model is models.PaymentMethod:
129             # special case
130             all_list_kwargs.extend(
131                 (
132                     {"customer": stripe_customer.id, "type": "card"}
133                     for stripe_customer in models.Customer.api_list()
134                 )
135             )
136         elif model is models.SubscriptionItem:
137             all_list_kwargs.extend(
138                 (
139                     {"subscription": subscription.id}
140                     for subscription in models.Subscription.api_list()
141                 )
142             )
143         else:
144             all_list_kwargs.append({})
145 
146         return all_list_kwargs
147
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/djstripe/management/commands/djstripe_sync_models.py b/djstripe/management/commands/djstripe_sync_models.py
--- a/djstripe/management/commands/djstripe_sync_models.py
+++ b/djstripe/management/commands/djstripe_sync_models.py
@@ -140,7 +140,7 @@
                     for subscription in models.Subscription.api_list()
                 )
             )
-        else:
+        elif not all_list_kwargs:
             all_list_kwargs.append({})
 
         return all_list_kwargs

{"golden_diff": "diff --git a/djstripe/management/commands/djstripe_sync_models.py b/djstripe/management/commands/djstripe_sync_models.py\n--- a/djstripe/management/commands/djstripe_sync_models.py\n+++ b/djstripe/management/commands/djstripe_sync_models.py\n@@ -140,7 +140,7 @@\n                     for subscription in models.Subscription.api_list()\n                 )\n             )\n-        else:\n+        elif not all_list_kwargs:\n             all_list_kwargs.append({})\n \n         return all_list_kwargs\n", "issue": "Issue when attempting to sync tiered Price Model in 2.4.2\n**Describe the bug**\r\n\r\nIt looks like 9bd896ffd944e809b95abae884a2149dc8a79f27 introduced a regression when trying to sync a tiered Price model. Probably Price is not the only model affected.\r\n\r\nCheck out this trace:\r\n\r\n```\r\n$ ./manage.py djstripe_sync_models Price\r\nSyncing Price:\r\nINFO     stripe.log_info:64- message='Request to Stripe api' method=get path=https://api.stripe.com/v1/prices?expand[0]=data.tiers\r\nINFO     stripe.log_info:64- message='Stripe API response' path=https://api.stripe.com/v1/prices?expand[0]=data.tiers response_code=200\r\n  id=price_1IFltoFz0jfFqjGsm5fbXWt5, pk=6 (xxx)\r\n  id=price_1IFe29Fz0jfFqjGsTpBrPQql, pk=1 (xxx)\r\n  id=price_1IFe29Fz0jfFqjGslZM7rvu1, pk=2 (xxx)\r\n  id=price_1IFe28Fz0jfFqjGsM0SIOAa6, pk=3 (xxx)\r\n  id=price_1IFe27Fz0jfFqjGsEN4c0MxR, pk=4 (xxx)\r\n  id=price_1IFe23Fz0jfFqjGsbFrlPDSi, pk=5 (xxx)\r\nINFO     stripe.log_info:64- message='Request to Stripe api' method=get path=https://api.stripe.com/v1/prices\r\nINFO     stripe.log_info:64- message='Stripe API response' path=https://api.stripe.com/v1/prices response_code=200\r\n  id=price_1IFltoFz0jfFqjGsm5fbXWt5, pk=6 (xxx)\r\n  id=price_1IFe29Fz0jfFqjGsTpBrPQql, pk=1 (xxx)\r\n  id=price_1IFe29Fz0jfFqjGslZM7rvu1, pk=2 (xxx)\r\n  id=price_1IFe28Fz0jfFqjGsM0SIOAa6, pk=3 (xxx)\r\n  id=price_1IFe27Fz0jfFqjGsEN4c0MxR, pk=4 (xxx)\r\n  id=price_1IFe23Fz0jfFqjGsbFrlPDSi, pk=5 (xxx)\r\n  Synced 12 Price\r\n```\r\n\r\nThe Price objects are synced twice. The first time with the tiers attribute expanded and the second time without expanding it and overwriting it, so the final object doesn't include tiers.\r\n\r\n**Software versions**\r\n- dj-stripe version: 2.4.2\r\n- Python version: 3.7\r\n- Django version: 3.0.11\r\n- Stripe API version: 2.55\r\n- Database type and version: postgresql 10.10\r\n\r\n**Steps To Reproduce**\r\n\r\n1. Create tiered Price and add tiers in Stripe Dashboard\r\n2. Sync Price models with manage command\r\n\r\n**Can you reproduce the issue with the latest version of master?**\r\n\r\nYes, both 2.4.2 and master are affected (2.4.1 is not affected)\r\n\r\n**Expected Behavior**\r\n\r\nThe Price Model should have the tiers JSONField object populated.\n", "before_files": [{"content": "from typing import List\n\nfrom django.apps import apps\nfrom django.core.management.base import BaseCommand, CommandError\n\nfrom ... import models, settings\n\n\nclass Command(BaseCommand):\n    \"\"\"Sync models from stripe.\"\"\"\n\n    help = \"Sync models from stripe.\"\n\n    def add_arguments(self, parser):\n        parser.add_argument(\n            \"args\",\n            metavar=\"ModelName\",\n            nargs=\"*\",\n            help=\"restricts sync to these model names (default is to sync all \"\n            \"supported models)\",\n        )\n\n    def handle(self, *args, **options):\n        app_label = \"djstripe\"\n        app_config = apps.get_app_config(app_label)\n        model_list = []  # type: List[models.StripeModel]\n\n        if args:\n            for model_label in args:\n                try:\n                    model = app_config.get_model(model_label)\n                except LookupError:\n                    raise CommandError(\n                        \"Unknown model: {}.{}\".format(app_label, model_label)\n                    )\n\n                model_list.append(model)\n        else:\n            model_list = app_config.get_models()\n\n        for model in model_list:\n            self.sync_model(model)\n\n    def _should_sync_model(self, model):\n        if not issubclass(model, models.StripeModel):\n            return False, \"not a StripeModel\"\n\n        if model.stripe_class is None:\n            return False, \"no stripe_class\"\n\n        if not hasattr(model.stripe_class, \"list\"):\n            return False, \"no stripe_class.list\"\n\n        if model is models.UpcomingInvoice:\n            return False, \"Upcoming Invoices are virtual only\"\n\n        if not settings.STRIPE_LIVE_MODE:\n            if model is models.ScheduledQueryRun:\n                return False, \"only available in live mode\"\n\n        return True, \"\"\n\n    def sync_model(self, model):\n        model_name = model.__name__\n\n        should_sync, reason = self._should_sync_model(model)\n        if not should_sync:\n            self.stdout.write(f\"Skipping {model}: {reason}\")\n            return\n\n        self.stdout.write(\"Syncing {}:\".format(model_name))\n\n        count = 0\n        for list_kwargs in self.get_list_kwargs(model):\n            try:\n                if model is models.Account:\n                    # special case, since own account isn't returned by Account.api_list\n                    stripe_obj = models.Account.stripe_class.retrieve(\n                        api_key=settings.STRIPE_SECRET_KEY\n                    )\n                    count += 1\n                    djstripe_obj = model.sync_from_stripe_data(stripe_obj)\n                    self.stdout.write(\n                        \"  id={id}, pk={pk} ({djstripe_obj})\".format(\n                            id=djstripe_obj.id,\n                            pk=djstripe_obj.pk,\n                            djstripe_obj=djstripe_obj,\n                        )\n                    )\n\n                for stripe_obj in model.api_list(**list_kwargs):\n                    count += 1\n                    djstripe_obj = model.sync_from_stripe_data(stripe_obj)\n                    self.stdout.write(\n                        \"  id={id}, pk={pk} ({djstripe_obj})\".format(\n                            id=djstripe_obj.id,\n                            pk=djstripe_obj.pk,\n                            djstripe_obj=djstripe_obj,\n                        )\n                    )\n\n            except Exception as e:\n                self.stderr.write(str(e))\n\n        if count == 0:\n            self.stdout.write(\"  (no results)\")\n        else:\n            self.stdout.write(\n                \"  Synced {count} {model_name}\".format(\n                    count=count, model_name=model_name\n                )\n            )\n\n    def get_list_kwargs(self, model):\n        \"\"\"\n        Returns a sequence of kwargs dicts to pass to model.api_list\n\n        This allows us to sync models that require parameters to api_list\n\n        :param model:\n        :return: Sequence[dict]\n        \"\"\"\n        all_list_kwargs = (\n            [{\"expand\": [f\"data.{k}\" for k in model.expand_fields]}]\n            if model.expand_fields\n            else []\n        )\n        if model is models.PaymentMethod:\n            # special case\n            all_list_kwargs.extend(\n                (\n                    {\"customer\": stripe_customer.id, \"type\": \"card\"}\n                    for stripe_customer in models.Customer.api_list()\n                )\n            )\n        elif model is models.SubscriptionItem:\n            all_list_kwargs.extend(\n                (\n                    {\"subscription\": subscription.id}\n                    for subscription in models.Subscription.api_list()\n                )\n            )\n        else:\n            all_list_kwargs.append({})\n\n        return all_list_kwargs\n", "path": "djstripe/management/commands/djstripe_sync_models.py"}], "after_files": [{"content": "from typing import List\n\nfrom django.apps import apps\nfrom django.core.management.base import BaseCommand, CommandError\n\nfrom ... import models, settings\n\n\nclass Command(BaseCommand):\n    \"\"\"Sync models from stripe.\"\"\"\n\n    help = \"Sync models from stripe.\"\n\n    def add_arguments(self, parser):\n        parser.add_argument(\n            \"args\",\n            metavar=\"ModelName\",\n            nargs=\"*\",\n            help=\"restricts sync to these model names (default is to sync all \"\n            \"supported models)\",\n        )\n\n    def handle(self, *args, **options):\n        app_label = \"djstripe\"\n        app_config = apps.get_app_config(app_label)\n        model_list = []  # type: List[models.StripeModel]\n\n        if args:\n            for model_label in args:\n                try:\n                    model = app_config.get_model(model_label)\n                except LookupError:\n                    raise CommandError(\n                        \"Unknown model: {}.{}\".format(app_label, model_label)\n                    )\n\n                model_list.append(model)\n        else:\n            model_list = app_config.get_models()\n\n        for model in model_list:\n            self.sync_model(model)\n\n    def _should_sync_model(self, model):\n        if not issubclass(model, models.StripeModel):\n            return False, \"not a StripeModel\"\n\n        if model.stripe_class is None:\n            return False, \"no stripe_class\"\n\n        if not hasattr(model.stripe_class, \"list\"):\n            return False, \"no stripe_class.list\"\n\n        if model is models.UpcomingInvoice:\n            return False, \"Upcoming Invoices are virtual only\"\n\n        if not settings.STRIPE_LIVE_MODE:\n            if model is models.ScheduledQueryRun:\n                return False, \"only available in live mode\"\n\n        return True, \"\"\n\n    def sync_model(self, model):\n        model_name = model.__name__\n\n        should_sync, reason = self._should_sync_model(model)\n        if not should_sync:\n            self.stdout.write(f\"Skipping {model}: {reason}\")\n            return\n\n        self.stdout.write(\"Syncing {}:\".format(model_name))\n\n        count = 0\n        for list_kwargs in self.get_list_kwargs(model):\n            try:\n                if model is models.Account:\n                    # special case, since own account isn't returned by Account.api_list\n                    stripe_obj = models.Account.stripe_class.retrieve(\n                        api_key=settings.STRIPE_SECRET_KEY\n                    )\n                    count += 1\n                    djstripe_obj = model.sync_from_stripe_data(stripe_obj)\n                    self.stdout.write(\n                        \"  id={id}, pk={pk} ({djstripe_obj})\".format(\n                            id=djstripe_obj.id,\n                            pk=djstripe_obj.pk,\n                            djstripe_obj=djstripe_obj,\n                        )\n                    )\n\n                for stripe_obj in model.api_list(**list_kwargs):\n                    count += 1\n                    djstripe_obj = model.sync_from_stripe_data(stripe_obj)\n                    self.stdout.write(\n                        \"  id={id}, pk={pk} ({djstripe_obj})\".format(\n                            id=djstripe_obj.id,\n                            pk=djstripe_obj.pk,\n                            djstripe_obj=djstripe_obj,\n                        )\n                    )\n\n            except Exception as e:\n                self.stderr.write(str(e))\n\n        if count == 0:\n            self.stdout.write(\"  (no results)\")\n        else:\n            self.stdout.write(\n                \"  Synced {count} {model_name}\".format(\n                    count=count, model_name=model_name\n                )\n            )\n\n    def get_list_kwargs(self, model):\n        \"\"\"\n        Returns a sequence of kwargs dicts to pass to model.api_list\n\n        This allows us to sync models that require parameters to api_list\n\n        :param model:\n        :return: Sequence[dict]\n        \"\"\"\n        all_list_kwargs = (\n            [{\"expand\": [f\"data.{k}\" for k in model.expand_fields]}]\n            if model.expand_fields\n            else []\n        )\n        if model is models.PaymentMethod:\n            # special case\n            all_list_kwargs.extend(\n                (\n                    {\"customer\": stripe_customer.id, \"type\": \"card\"}\n                    for stripe_customer in models.Customer.api_list()\n                )\n            )\n        elif model is models.SubscriptionItem:\n            all_list_kwargs.extend(\n                (\n                    {\"subscription\": subscription.id}\n                    for subscription in models.Subscription.api_list()\n                )\n            )\n        elif not all_list_kwargs:\n            all_list_kwargs.append({})\n\n        return all_list_kwargs\n", "path": "djstripe/management/commands/djstripe_sync_models.py"}]}