diff --git a/rest_framework/fields.py b/rest_framework/fields.py index a4e29a30a..4c2064261 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -522,7 +522,10 @@ class HyperlinkedRelatedField(RelatedField): view_name = self.view_name request = self.context.get('request', None) format = self.format or self.context.get('format', None) - kwargs = {self.pk_url_kwarg: obj.pk} + pk = getattr(obj, 'pk', None) + if pk is None: + return + kwargs = {self.pk_url_kwarg: pk} try: return reverse(view_name, kwargs=kwargs, request=request, format=format) except: diff --git a/rest_framework/tests/hyperlinkedserializers.py b/rest_framework/tests/hyperlinkedserializers.py index 3a955ddfb..5ab850afa 100644 --- a/rest_framework/tests/hyperlinkedserializers.py +++ b/rest_framework/tests/hyperlinkedserializers.py @@ -224,11 +224,12 @@ class TestOptionalRelationHyperlinkedView(TestCase): def setUp(self): """ - Create 1 OptionaRelationModel intances. + Create 1 OptionalRelationModel intances. """ OptionalRelationModel().save() self.objects = OptionalRelationModel.objects self.detail_view = OptionalRelationDetail.as_view() + self.data = {"url": "http://testserver/optionalrelation/1/", "other": None} def test_get_detail_view(self): """ @@ -238,5 +239,4 @@ class TestOptionalRelationHyperlinkedView(TestCase): request = factory.get('/optionalrelationmodel-detail/1') response = self.detail_view(request, pk=1).render() self.assertEquals(response.status_code, status.HTTP_200_OK) - - + self.assertEquals(response.data, self.data)