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()
This commit is contained in:
vaseksmolik 2022-08-31 10:21:18 +02:00 committed by GitHub
parent 5bf338ea88
commit 85bd4896b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -255,23 +255,24 @@ class PrimaryKeyRelatedField(RelatedField):
return True return True
def to_internal_value(self, data): def to_internal_value(self, data):
pk = "pk"
if self.pk_field is not None: if self.pk_field is not None:
data = self.pk_field.to_internal_value(data) pk = self.pk_field
queryset = self.get_queryset() queryset = self.get_queryset()
try: try:
if isinstance(data, bool): if isinstance(data, bool):
raise TypeError raise TypeError
return queryset.get(pk=data) return queryset.get(**{pk: data})
except ObjectDoesNotExist: except ObjectDoesNotExist:
self.fail('does_not_exist', pk_value=data) self.fail('does_not_exist', pk_value=data)
except (TypeError, ValueError): except (TypeError, ValueError):
self.fail('incorrect_type', data_type=type(data).__name__) self.fail('incorrect_type', data_type=type(data).__name__)
def to_representation(self, value): def to_representation(self, value):
pk = "pk"
if self.pk_field is not None: if self.pk_field is not None:
return self.pk_field.to_representation(value.pk) pk = self.pk_field
return value.pk return getattr(value, pk)
class HyperlinkedRelatedField(RelatedField): class HyperlinkedRelatedField(RelatedField):
lookup_field = 'pk' lookup_field = 'pk'