summaryrefslogtreecommitdiff
path: root/django/core/serializers/python.py
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2014-12-21 14:24:15 +0100
committerClaude Paroz <claude@2xlibre.net>2014-12-23 16:01:39 +0100
commit9fecb86a5221982ea753270b7d2b4c6487f79941 (patch)
tree31036c54c7eafb51f8725b323f4f6d6d81b9af02 /django/core/serializers/python.py
parent227a4c48be18a439f0a08a49bf1f3062babeee82 (diff)
downloaddjango-9fecb86a5221982ea753270b7d2b4c6487f79941.tar.gz
Fixed #17946 -- Fixed deserialization of self-referencing M2M fields
Thanks Philip Mountifield for the report and excellent analysis, and Simon Charette for the review.
Diffstat (limited to 'django/core/serializers/python.py')
-rw-r--r--django/core/serializers/python.py14
1 files changed, 7 insertions, 7 deletions
diff --git a/django/core/serializers/python.py b/django/core/serializers/python.py
index db4e11452e..b4712c76be 100644
--- a/django/core/serializers/python.py
+++ b/django/core/serializers/python.py
@@ -9,7 +9,7 @@ from django.apps import apps
from django.conf import settings
from django.core.serializers import base
from django.db import models, DEFAULT_DB_ALIAS
-from django.utils.encoding import smart_text, is_protected_type
+from django.utils.encoding import force_text, is_protected_type
from django.utils import six
@@ -36,11 +36,11 @@ class Serializer(base.Serializer):
def get_dump_object(self, obj):
data = {
- "model": smart_text(obj._meta),
+ "model": force_text(obj._meta),
"fields": self._current,
}
if not self.use_natural_primary_keys or not hasattr(obj, 'natural_key'):
- data["pk"] = smart_text(obj._get_pk_val(), strings_only=True)
+ data["pk"] = force_text(obj._get_pk_val(), strings_only=True)
return data
@@ -70,7 +70,7 @@ class Serializer(base.Serializer):
if self.use_natural_foreign_keys and hasattr(field.rel.to, 'natural_key'):
m2m_value = lambda value: value.natural_key()
else:
- m2m_value = lambda value: smart_text(value._get_pk_val(), strings_only=True)
+ m2m_value = lambda value: force_text(value._get_pk_val(), strings_only=True)
self._current[field.name] = [m2m_value(related)
for related in getattr(obj, field.name).iterator()]
@@ -111,7 +111,7 @@ def Deserializer(object_list, **options):
continue
if isinstance(field_value, str):
- field_value = smart_text(
+ field_value = force_text(
field_value, options.get("encoding", settings.DEFAULT_CHARSET), strings_only=True
)
@@ -124,9 +124,9 @@ def Deserializer(object_list, **options):
if hasattr(value, '__iter__') and not isinstance(value, six.text_type):
return field.rel.to._default_manager.db_manager(db).get_by_natural_key(*value).pk
else:
- return smart_text(field.rel.to._meta.pk.to_python(value))
+ return force_text(field.rel.to._meta.pk.to_python(value), strings_only=True)
else:
- m2m_convert = lambda v: smart_text(field.rel.to._meta.pk.to_python(v))
+ m2m_convert = lambda v: force_text(field.rel.to._meta.pk.to_python(v), strings_only=True)
m2m_data[field.name] = [m2m_convert(pk) for pk in field_value]
# Handle FK fields