From a24fed399ced6be2e9dce4cf28db00c3ee21a21c Mon Sep 17 00:00:00 2001
From: Rust Saiargaliev <rustem.saiargaliev@thermondo.de>
Date: Mon, 10 May 2021 22:19:29 +0200
Subject: [PATCH] Fixed #32733 -- Skipped system check for specifying type of
 auto-created primary keys on abstract models.

Regression in b5e12d490af3debca8c55ab3c1698189fdedbbdb.
---
 django/db/models/base.py                   | 1 +
 docs/releases/3.2.4.txt                    | 3 +++
 tests/check_framework/test_model_checks.py | 8 ++++++++
 3 files changed, 12 insertions(+)

diff --git a/django/db/models/base.py b/django/db/models/base.py
index cd5268bed1..0f8af9f920 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -1302,6 +1302,7 @@ class Model(metaclass=ModelBase):
     @classmethod
     def _check_default_pk(cls):
         if (
+            not cls._meta.abstract and
             cls._meta.pk.auto_created and
             # Inherited PKs are checked in parents models.
             not (
diff --git a/docs/releases/3.2.4.txt b/docs/releases/3.2.4.txt
index 51a4898163..068798e6ed 100644
--- a/docs/releases/3.2.4.txt
+++ b/docs/releases/3.2.4.txt
@@ -12,3 +12,6 @@ Bugfixes
 * Fixed a bug in Django 3.2 where a final catch-all view in the admin didn't
   respect the server-provided value of ``SCRIPT_NAME`` when redirecting
   unauthenticated users to the login page (:ticket:`32754`).
+
+* Fixed a bug in Django 3.2 where a system check would crash on an abstract
+  model (:ticket:`32733`).
diff --git a/tests/check_framework/test_model_checks.py b/tests/check_framework/test_model_checks.py
index cf0aca404f..5c62ace7e4 100644
--- a/tests/check_framework/test_model_checks.py
+++ b/tests/check_framework/test_model_checks.py
@@ -403,6 +403,14 @@ class ModelDefaultAutoFieldTests(SimpleTestCase):
 
         self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [])
 
+    def test_skipped_on_abstract_model(self):
+        class Abstract(models.Model):
+            class Meta:
+                abstract = True
+
+        # Call .check() because abstract models are not registered.
+        self.assertEqual(Abstract.check(), [])
+
     def test_explicit_inherited_parent_link(self):
         class Parent(models.Model):
             id = models.AutoField(primary_key=True)