Skip to content

Commit 1aa6d39

Browse files
committed
Created JSONAPIRelatedField
1 parent 96a6484 commit 1aa6d39

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from django.core.exceptions import ObjectDoesNotExist
2+
from rest_framework.relations import HyperlinkedRelatedField
3+
4+
5+
class JSONAPIRelatedField(HyperlinkedRelatedField):
6+
"""
7+
This field exists for the sole purpose of accepting PKs as well as URLs
8+
when data is submitted back to the serializer
9+
"""
10+
11+
def __init__(self, **kwargs):
12+
self.pk_field = kwargs.pop('pk_field', None)
13+
super(JSONAPIRelatedField, self).__init__(**kwargs)
14+
15+
def to_internal_value(self, data):
16+
try:
17+
super(JSONAPIRelatedField, self).to_internal_value(data)
18+
except AssertionError:
19+
if self.pk_field is not None:
20+
data = self.pk_field.to_internal_value(data)
21+
try:
22+
return self.get_queryset().get(pk=data)
23+
except ObjectDoesNotExist:
24+
self.fail('does_not_exist', pk_value=data)
25+
except (TypeError, ValueError):
26+
self.fail('incorrect_type', data_type=type(data).__name__)

0 commit comments

Comments
 (0)