diff --git a/django/db/models/base.py b/django/db/models/base.py
index 34fb0ab0b4..b223764879 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -1357,7 +1357,7 @@ class Model(six.with_metaclass(ModelBase)):
 
     @classmethod
     def _check_ordering(cls):
-        """ Check "ordering" option -- is it a list of lists and do all fields
+        """ Check "ordering" option -- is it a list of strings and do all fields
         exist? """
 
         from django.db.models import FieldDoesNotExist
@@ -1401,6 +1401,14 @@ class Model(six.with_metaclass(ModelBase)):
             try:
                 cls._meta.get_field(field_name, many_to_many=False)
             except FieldDoesNotExist:
+                if field_name.endswith('_id'):
+                    try:
+                        field = cls._meta.get_field(field_name[:-3], many_to_many=False)
+                    except FieldDoesNotExist:
+                        pass
+                    else:
+                        if field.attname == field_name:
+                            continue
                 errors.append(
                     checks.Error(
                         "'ordering' refers to the non-existent field '%s'." % field_name,
diff --git a/tests/invalid_models_tests/test_models.py b/tests/invalid_models_tests/test_models.py
index 1338fcabcd..9cbaa8449c 100644
--- a/tests/invalid_models_tests/test_models.py
+++ b/tests/invalid_models_tests/test_models.py
@@ -415,6 +415,40 @@ class OtherModelTests(IsolatedModelsTestCase):
         ]
         self.assertEqual(errors, expected)
 
+    def test_ordering_pointing_to_missing_foreignkey_field(self):
+        # refs #22711
+
+        class Model(models.Model):
+            missing_fk_field = models.IntegerField()
+
+            class Meta:
+                ordering = ("missing_fk_field_id",)
+
+        errors = Model.check()
+        expected = [
+            Error(
+                "'ordering' refers to the non-existent field 'missing_fk_field_id'.",
+                hint=None,
+                obj=Model,
+                id='models.E015',
+            )
+        ]
+        self.assertEqual(errors, expected)
+
+    def test_ordering_pointing_to_existing_foreignkey_field(self):
+        # refs #22711
+
+        class Parent(models.Model):
+            pass
+
+        class Child(models.Model):
+            parent = models.ForeignKey(Parent)
+
+            class Meta:
+                ordering = ("parent_id",)
+
+        self.assertFalse(Child.check())
+
     @override_settings(TEST_SWAPPED_MODEL_BAD_VALUE='not-a-model')
     def test_swappable_missing_app_name(self):
         class Model(models.Model):