summaryrefslogtreecommitdiff
path: root/django/core/serializers/base.py
diff options
context:
space:
mode:
authorJoão Sampaio <jpmelos@gmail.com>2016-10-08 15:09:49 -0300
committerTim Graham <timograham@gmail.com>2016-10-12 20:04:57 -0400
commit74a575eb7296fb04e1fc2bd4e3f68dee3c66ee0a (patch)
treedddf32453cd3d4f10c8d4c6bf64ab9fefcdeb4e7 /django/core/serializers/base.py
parent794f866cecb7598c1537067cc1d932d95a86f439 (diff)
Fixed #24607 -- Serialized natural keys in multi-table inheritance models.
Diffstat (limited to 'django/core/serializers/base.py')
-rw-r--r--django/core/serializers/base.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/django/core/serializers/base.py b/django/core/serializers/base.py
index a6c8847278..cc3d94e155 100644
--- a/django/core/serializers/base.py
+++ b/django/core/serializers/base.py
@@ -88,7 +88,7 @@ class Serializer(object):
if self.selected_fields is None or field.attname in self.selected_fields:
self.handle_field(obj, field)
else:
- if self.selected_fields is None or field.attname[:-3] in self.selected_fields:
+ if self.field_is_selected(field) and self.output_pk_field(obj, field):
self.handle_fk_field(obj, field)
for field in concrete_model._meta.many_to_many:
if field.serialize:
@@ -101,6 +101,12 @@ class Serializer(object):
self.end_serialization()
return self.getvalue()
+ def field_is_selected(self, field):
+ return self.selected_fields is None or field.attname[:-3] in self.selected_fields
+
+ def output_pk_field(self, obj, pk_field):
+ return self.use_natural_primary_keys or pk_field != obj._meta.pk
+
def start_serialization(self):
"""
Called when serializing of the queryset starts.