diff options
Diffstat (limited to 'django/core/serializers/base.py')
| -rw-r--r-- | django/core/serializers/base.py | 8 |
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. |
