diff --git a/django/db/models/base.py b/django/db/models/base.py
index 305ed9b924..657236571d 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -44,7 +44,7 @@ class ModelBase(type):
             new_class._meta.app_label = model_module.__name__.split('.')[-2]
 
         # Bail out early if we have already created this class.
-        m = get_model(new_class._meta.app_label, name)
+        m = get_model(new_class._meta.app_label, name, False)
         if m is not None:
             return m
 
@@ -68,7 +68,7 @@ class ModelBase(type):
         # the first class for this model to register with the framework. There
         # should only be one class for each model, so we must always return the
         # registered version.
-        return get_model(new_class._meta.app_label, name)
+        return get_model(new_class._meta.app_label, name, False)
 
 class Model(object):
     __metaclass__ = ModelBase
diff --git a/django/db/models/loading.py b/django/db/models/loading.py
index c7920fa4e0..ece41ed6e4 100644
--- a/django/db/models/loading.py
+++ b/django/db/models/loading.py
@@ -75,11 +75,15 @@ def get_models(app_mod=None):
             model_list.extend(get_models(app_mod))
         return model_list
 
-def get_model(app_label, model_name):
+def get_model(app_label, model_name, seed_cache = True):
     """
-    Returns the model matching the given app_label and case-insensitive model_name.
+    Returns the model matching the given app_label and case-insensitive
+    model_name.
+
     Returns None if no model is found.
     """
+    if seed_cache:
+        get_apps()
     try:
         model_dict = _app_models[app_label]
     except KeyError: