Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 629d1d6

Browse files
Darkheirmblayman
authored andcommitted
Fixes types in reverse m2m relationships (#355)
* Adds test that fails with reverse m2m relationships * Fixes reverse m2m relationships * Adds compatibility with Django 1.8 * Update AUTHORS
1 parent ab4e1bd commit 629d1d6

File tree

5 files changed

+24
-5
lines changed

5 files changed

+24
-5
lines changed

‎AUTHORS‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ Greg Aker <greg@gregaker.net>
44
Jerel Unruh <mail@unruhdesigns.com>
55
Matt Layman <http://www.mattlayman.com>
66
Oliver Sauder <os@esite.ch>
7+
Raphael Cohen <raphael.cohen.utt@gmail.com>
78
Yaniv Peer <yanivpeer@gmail.com>

‎example/models.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff 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)

‎example/serializers.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff 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

9898
class 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

108108
class CommentSerializer(serializers.ModelSerializer):

‎example/tests/test_utils.py‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"""
44
from rest_framework_json_api import utils
55

6-
from ..serializers import EntrySerializer
6+
from ..serializers import EntrySerializer, AuthorSerializer
77
from ..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')

‎rest_framework_json_api/utils.py‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff 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:

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /