summaryrefslogtreecommitdiff
path: root/django/core/serializers/python.py
diff options
context:
space:
mode:
authorAndrew Godwin <andrew@aeracode.org>2012-10-26 08:41:13 +0100
committerAndrew Godwin <andrew@aeracode.org>2012-10-26 08:41:13 +0100
commit6a632e04578776e877adc5e2dc53f008c890a0d4 (patch)
treeaa47200fb63adf44609066a45601bd3b8768ec1c /django/core/serializers/python.py
parenta589fdff81ab36c57ff0a1003e60ee0dd55f3a88 (diff)
parentfabe9c9e5f0a437b5389faaf469ce53091abd3cf (diff)
Merge branch 'master' into schema-alteration
Conflicts: django/db/backends/__init__.py django/db/models/fields/related.py django/db/models/options.py
Diffstat (limited to 'django/core/serializers/python.py')
-rw-r--r--django/core/serializers/python.py12
1 files changed, 11 insertions, 1 deletions
diff --git a/django/core/serializers/python.py b/django/core/serializers/python.py
index a1fff6f9bb..37fa906280 100644
--- a/django/core/serializers/python.py
+++ b/django/core/serializers/python.py
@@ -11,6 +11,7 @@ from django.db import models, DEFAULT_DB_ALIAS
from django.utils.encoding import smart_text, is_protected_type
from django.utils import six
+
class Serializer(base.Serializer):
"""
Serializes a QuerySet to basic Python objects.
@@ -72,6 +73,7 @@ class Serializer(base.Serializer):
def getvalue(self):
return self.objects
+
def Deserializer(object_list, **options):
"""
Deserialize simple Python objects back into Django ORM instances.
@@ -80,15 +82,23 @@ def Deserializer(object_list, **options):
stream or a string) to the constructor
"""
db = options.pop('using', DEFAULT_DB_ALIAS)
+ ignore = options.pop('ignorenonexistent', False)
+
models.get_apps()
for d in object_list:
# Look up the model and starting build a dict of data for it.
Model = _get_model(d["model"])
- data = {Model._meta.pk.attname : Model._meta.pk.to_python(d["pk"])}
+ data = {Model._meta.pk.attname: Model._meta.pk.to_python(d["pk"])}
m2m_data = {}
+ model_fields = Model._meta.get_all_field_names()
# Handle each field
for (field_name, field_value) in six.iteritems(d["fields"]):
+
+ if ignore and field_name not in model_fields:
+ # skip fields no longer on model
+ continue
+
if isinstance(field_value, str):
field_value = smart_text(field_value, options.get("encoding", settings.DEFAULT_CHARSET), strings_only=True)