From ec9043ab2f6027da709d1daf0df5599db6a77453 Mon Sep 17 00:00:00 2001
From: Esau Rodriguez <esauro@gmail.com>
Date: Fri, 21 Feb 2014 06:43:08 +0000
Subject: [PATCH] Fixed #21799 - Modified loaddata --ignorenonexistent to
 ignore models.

---
 django/core/serializers/python.py                   |  8 +++++++-
 docs/ref/django-admin.txt                           |  9 ++++++---
 docs/releases/1.8.txt                               |  3 +++
 tests/fixtures_regress/fixtures/sequence_extra.json | 11 +++++++++++
 4 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/django/core/serializers/python.py b/django/core/serializers/python.py
index 249dc5a054..aa21598695 100644
--- a/django/core/serializers/python.py
+++ b/django/core/serializers/python.py
@@ -90,7 +90,13 @@ def Deserializer(object_list, **options):
 
     for d in object_list:
         # Look up the model and starting build a dict of data for it.
-        Model = _get_model(d["model"])
+        try:
+            Model = _get_model(d["model"])
+        except base.DeserializationError as e:
+            if ignore:
+                continue
+            else:
+                raise e
         data = {}
         if 'pk' in d:
             data[Model._meta.pk.attname] = Model._meta.pk.to_python(d.get("pk", None))
diff --git a/docs/ref/django-admin.txt b/docs/ref/django-admin.txt
index 7ceddb9cc2..fe1d8dbc38 100644
--- a/docs/ref/django-admin.txt
+++ b/docs/ref/django-admin.txt
@@ -383,14 +383,17 @@ onto which the data will be loaded.
 
 .. django-admin-option:: --ignorenonexistent
 
-The :djadminopt:`--ignorenonexistent` option can be used to ignore fields that
-may have been removed from models since the fixture was originally generated.
-
+The :djadminopt:`--ignorenonexistent` option can be used to ignore fields and
+models that may have been removed since the fixture was originally generated.
 
 .. versionchanged:: 1.7
 
     ``--app`` was added.
 
+.. versionchanged:: 1.8
+
+    ``--ignorenonexistent`` also ignores non-existent models.
+
 .. django-admin-option:: --app
 
 The :djadminopt:`--app` option can be used to specify a single app to look
diff --git a/docs/releases/1.8.txt b/docs/releases/1.8.txt
index 94a4f3ed74..6b0cb85058 100644
--- a/docs/releases/1.8.txt
+++ b/docs/releases/1.8.txt
@@ -145,6 +145,9 @@ Management Commands
   :djadminopt:`--exclude` which allows exclusion of specific locales from
   processing.
 
+* The :djadminopt:`--ignorenonexistent` option of the :djadmin:`loaddata`
+  management command now ignores data for models that no longer exist.
+
 Models
 ^^^^^^
 
diff --git a/tests/fixtures_regress/fixtures/sequence_extra.json b/tests/fixtures_regress/fixtures/sequence_extra.json
index 03c0f36696..d668ef6143 100644
--- a/tests/fixtures_regress/fixtures/sequence_extra.json
+++ b/tests/fixtures_regress/fixtures/sequence_extra.json
@@ -9,5 +9,16 @@
             "count": 3,
             "weight": 1.2
         }
+    },
+        {
+        "pk": "1",
+        "model": "fixtures_regress.animal_extra",
+        "fields": {
+            "name": "Non-existent model",
+            "extra_name": "test for ticket #21799",
+            "latin_name": "Panthera leo",
+            "count": 3,
+            "weight": 1.2
+        }
     }
 ]