File tree Expand file tree Collapse file tree 5 files changed +24
-5
lines changed Expand file tree Collapse file tree 5 files changed +24
-5
lines changed Original file line number Diff line number Diff line change @@ -4,4 +4,5 @@ Greg Aker <greg@gregaker.net>
44Jerel Unruh <mail@unruhdesigns.com>
55Matt Layman <http://www.mattlayman.com>
66Oliver Sauder <os@esite.ch>
7+ Raphael Cohen <raphael.cohen.utt@gmail.com>
78Yaniv Peer <yanivpeer@gmail.com>
Original file line number Diff line number Diff line change @@ -64,7 +64,7 @@ class Entry(BaseModel):
6464 body_text = models .TextField (null = True )
6565 pub_date = models .DateField (null = True )
6666 mod_date = models .DateField (null = True )
67- authors = models .ManyToManyField (Author )
67+ authors = models .ManyToManyField (Author , related_name = 'entries' )
6868 n_comments = models .IntegerField (default = 0 )
6969 n_pingbacks = models .IntegerField (default = 0 )
7070 rating = models .IntegerField (default = 0 )
Original file line number Diff line number Diff line change @@ -92,7 +92,7 @@ class AuthorBioSerializer(serializers.ModelSerializer):
9292
9393 class Meta :
9494 model = AuthorBio
95- fields = ('author' , 'body' , )
95+ fields = ('author' , 'body' )
9696
9797
9898class AuthorSerializer (serializers .ModelSerializer ):
@@ -102,7 +102,7 @@ class AuthorSerializer(serializers.ModelSerializer):
102102
103103 class Meta :
104104 model = Author
105- fields = ('name' , 'email' , 'bio' )
105+ fields = ('name' , 'email' , 'bio' , 'entries' )
106106
107107
108108class CommentSerializer (serializers .ModelSerializer ):
Original file line number Diff line number Diff line change 33"""
44from rest_framework_json_api import utils
55
6- from ..serializers import EntrySerializer
6+ from ..serializers import EntrySerializer , AuthorSerializer
77from ..tests import TestBase
88
99
@@ -29,3 +29,12 @@ def test_m2m_relation(self):
2929 field = serializer .fields ['authors' ]
3030
3131 self .assertEqual (utils .get_related_resource_type (field ), 'authors' )
32+
33+ def test_m2m_reverse_relation (self ):
34+ """
35+ Ensure reverse m2ms have their types identified correctly.
36+ """
37+ serializer = AuthorSerializer ()
38+ field = serializer .fields ['entries' ]
39+
40+ self .assertEqual (utils .get_related_resource_type (field ), 'entries' )
Original file line number Diff line number Diff line change @@ -237,7 +237,16 @@ def get_related_resource_type(relation):
237237 else :
238238 relation_model = parent_model_relation .related .model
239239 elif parent_model_relation_type is ManyToManyDescriptor :
240- relation_model = parent_model_relation .field .remote_field .model
240+ if django .VERSION >= (1 , 9 ):
241+ relation_model = parent_model_relation .field .remote_field .model
242+ # In case we are in a reverse relation
243+ if relation_model == parent_model :
244+ relation_model = parent_model_relation .field .model
245+ elif django .VERSION >= (1 , 8 ):
246+ relation_model = parent_model_relation .related .model
247+ # In case we are in a reverse relation
248+ if relation_model == parent_model :
249+ relation_model = parent_model_relation .related .related_model
241250 elif parent_model_relation_type is ReverseManyRelatedObjectsDescriptor :
242251 relation_model = parent_model_relation .field .related .model
243252 elif parent_model_relation_type is ReverseGenericManyToOneDescriptor :
You can’t perform that action at this time.
0 commit comments