File tree Expand file tree Collapse file tree 1 file changed +26
-0
lines changed Expand file tree Collapse file tree 1 file changed +26
-0
lines changed Original file line number Diff line number Diff line change 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__ )
You can’t perform that action at this time.
0 commit comments