From ec9043ab2f6027da709d1daf0df5599db6a77453 Mon Sep 17 00:00:00 2001 From: Esau Rodriguez 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 + } } ]