diff --git a/AUTHORS b/AUTHORS
index 0c1b017dc6..0a1ed3e1eb 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -434,6 +434,7 @@ answer newbie questions, and generally made Django that much better:
     Marian Andre <django@andre.sk>
     Marijn Vriens <marijn@metronomo.cl>
     Mario Gonzalez <gonzalemario@gmail.com>
+    Mariusz Felisiak <felisiak.mariusz@gmail.com>
     Mark Biggers <biggers@utsl.com>
     mark@junklight.com
     Mark Lavin <markdlavin@gmail.com>
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index 83e2a0aa8f..cdb01cadcb 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -1523,6 +1523,9 @@ class ForeignObject(RelatedField):
         except AttributeError:
             return []
 
+        if not self.foreign_related_fields:
+            return []
+
         has_unique_field = any(rel_field.unique
             for rel_field in self.foreign_related_fields)
         if not has_unique_field and len(self.foreign_related_fields) > 1:
@@ -1622,7 +1625,7 @@ class ForeignObject(RelatedField):
 
     @property
     def foreign_related_fields(self):
-        return tuple(rhs_field for lhs_field, rhs_field in self.related_fields)
+        return tuple(rhs_field for lhs_field, rhs_field in self.related_fields if rhs_field)
 
     def get_local_related_value(self, instance):
         return self.get_instance_value_for_fields(instance, self.local_related_fields)
diff --git a/docs/releases/1.8.6.txt b/docs/releases/1.8.6.txt
index 15b85a66c8..b972ee0148 100644
--- a/docs/releases/1.8.6.txt
+++ b/docs/releases/1.8.6.txt
@@ -14,3 +14,6 @@ Bugfixes
 
 * Allowed "mode=memory" in SQLite test database name if supported
   (:ticket:`12118`).
+
+* Fixed system check crash on ``ForeignKey`` to abstract model
+  (:ticket:`25503`).
diff --git a/tests/invalid_models_tests/test_relative_fields.py b/tests/invalid_models_tests/test_relative_fields.py
index 5d174d0c9b..c18fe85538 100644
--- a/tests/invalid_models_tests/test_relative_fields.py
+++ b/tests/invalid_models_tests/test_relative_fields.py
@@ -296,25 +296,27 @@ class RelativeFieldTests(IsolatedModelsTestCase):
         self.assertEqual(errors, expected)
 
     def test_foreign_key_to_abstract_model(self):
-        class Model(models.Model):
-            foreign_key = models.ForeignKey('AbstractModel')
-
         class AbstractModel(models.Model):
             class Meta:
                 abstract = True
 
-        field = Model._meta.get_field('foreign_key')
-        errors = field.check()
-        expected = [
-            Error(
-                ("Field defines a relation with model 'AbstractModel', "
-                 "which is either not installed, or is abstract."),
-                hint=None,
-                obj=field,
-                id='fields.E300',
-            ),
+        class Model(models.Model):
+            rel_string_foreign_key = models.ForeignKey('AbstractModel')
+            rel_class_foreign_key = models.ForeignKey(AbstractModel)
+
+        fields = [
+            Model._meta.get_field('rel_string_foreign_key'),
+            Model._meta.get_field('rel_class_foreign_key'),
         ]
-        self.assertEqual(errors, expected)
+        expected_error = Error(
+            "Field defines a relation with model 'AbstractModel', "
+            "which is either not installed, or is abstract.",
+            id='fields.E300',
+        )
+        for field in fields:
+            expected_error.obj = field
+            errors = field.check()
+            self.assertEqual(errors, [expected_error])
 
     def test_m2m_to_abstract_model(self):
         class AbstractModel(models.Model):
@@ -322,20 +324,22 @@ class RelativeFieldTests(IsolatedModelsTestCase):
                 abstract = True
 
         class Model(models.Model):
-            m2m = models.ManyToManyField('AbstractModel')
+            rel_string_m2m = models.ManyToManyField('AbstractModel')
+            rel_class_m2m = models.ManyToManyField(AbstractModel)
 
-        field = Model._meta.get_field('m2m')
-        errors = field.check(from_model=Model)
-        expected = [
-            Error(
-                ("Field defines a relation with model 'AbstractModel', "
-                 "which is either not installed, or is abstract."),
-                hint=None,
-                obj=field,
-                id='fields.E300',
-            ),
+        fields = [
+            Model._meta.get_field('rel_string_m2m'),
+            Model._meta.get_field('rel_class_m2m'),
         ]
-        self.assertEqual(errors, expected)
+        expected_error = Error(
+            "Field defines a relation with model 'AbstractModel', "
+            "which is either not installed, or is abstract.",
+            id='fields.E300',
+        )
+        for field in fields:
+            expected_error.obj = field
+            errors = field.check(from_model=Model)
+            self.assertEqual(errors, [expected_error])
 
     def test_unique_m2m(self):
         class Person(models.Model):