From 85bd4896b9064e1e5434653e53855a9508894d26 Mon Sep 17 00:00:00 2001 From: vaseksmolik <66821604+vaseksmolik@users.noreply.github.com> Date: Wed, 31 Aug 2022 10:21:18 +0200 Subject: [PATCH] PrimaryKeyRelatedField with defined pk_field didn't work It tries to find "pk_field" on self, which is field class. I changed it to use getattr method on value instead. Used in PrimaryKeyRelatedField.to_representation() and PrimaryKeyRelatedField.to_internal_value() --- rest_framework/relations.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/rest_framework/relations.py b/rest_framework/relations.py index bdedd43b8..cb8617fb8 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -255,23 +255,24 @@ class PrimaryKeyRelatedField(RelatedField): return True def to_internal_value(self, data): + pk = "pk" if self.pk_field is not None: - data = self.pk_field.to_internal_value(data) + pk = self.pk_field queryset = self.get_queryset() try: if isinstance(data, bool): raise TypeError - return queryset.get(pk=data) + return queryset.get(**{pk: data}) except ObjectDoesNotExist: self.fail('does_not_exist', pk_value=data) except (TypeError, ValueError): self.fail('incorrect_type', data_type=type(data).__name__) def to_representation(self, value): + pk = "pk" if self.pk_field is not None: - return self.pk_field.to_representation(value.pk) - return value.pk - + pk = self.pk_field + return getattr(value, pk) class HyperlinkedRelatedField(RelatedField): lookup_field = 'pk'