Skip to content

Commit 82ec6e8

Browse files
committed
Merge pull request encode#3962 from jslang/fix_null_check_in_hyperlinkrelation
Fix empty pk detection in HyperlinkRelatedField.get_url
2 parents 5f3868a + 7ac8cc7 commit 82ec6e8

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

rest_framework/relations.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ def get_url(self, obj, view_name, request, format):
280280
attributes are not configured to correctly match the URL conf.
281281
"""
282282
# Unsaved objects will not yet have a valid URL.
283-
if hasattr(obj, 'pk') and obj.pk is None:
283+
if hasattr(obj, 'pk') and obj.pk in (None, ''):
284284
return None
285285

286286
lookup_value = getattr(obj, self.lookup_field)

tests/test_relations.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,18 @@ def test_pk_representation(self):
8787
assert representation == self.instance.pk.int
8888

8989

90+
class TestHyperlinkedRelatedField(APISimpleTestCase):
91+
def setUp(self):
92+
self.field = serializers.HyperlinkedRelatedField(
93+
view_name='example', read_only=True)
94+
self.field.reverse = mock_reverse
95+
self.field._context = {'request': True}
96+
97+
def test_representation_unsaved_object_with_non_nullable_pk(self):
98+
representation = self.field.to_representation(MockObject(pk=''))
99+
assert representation is None
100+
101+
90102
class TestHyperlinkedIdentityField(APISimpleTestCase):
91103
def setUp(self):
92104
self.instance = MockObject(pk=1, name='foo')

0 commit comments

Comments
 (0)