Skip to content

Commit 83eec4d

Browse files
authored
Merge pull request #27 from MaxDude132/26
26 - Fix lookup for ManyToMany reverse relation
2 parents cfc070b + 5d3033a commit 83eec4d

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

serializer_prefetch/utils.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ def is_model_field(model, source):
1414
if not isinstance(model_field, DjangoModelField | ForeignObjectRel):
1515
return False
1616
except FieldDoesNotExist:
17+
if source.endswith("_set"):
18+
return is_model_field(model, source[:-4])
19+
1720
return False
1821

1922
return True

tests/test_serializers.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@
88
# drf-serializer-prefetch
99
from serializer_prefetch import PrefetchingSerializerMixin
1010
from tests.models import Continent, Country, Pizza, Topping
11-
from tests.serializers import CountrySerializer, PizzaSerializer, ToppingSerializer
11+
from tests.serializers import (
12+
ContinentSerializer,
13+
CountrySerializer,
14+
PizzaSerializer,
15+
ToppingSerializer,
16+
)
1217

1318

1419
class SerializersTestCase(TestCase):
@@ -944,3 +949,19 @@ class Meta:
944949

945950
with self.assertNumQueries(2):
946951
serializer.data
952+
953+
def test_reverse_many_to_many_relation(self):
954+
class ContinentSerializer(
955+
PrefetchingSerializerMixin, serializers.ModelSerializer
956+
):
957+
country_set = CountrySerializer(many=True)
958+
959+
class Meta:
960+
model = Continent
961+
fields = ("label", "country_set")
962+
963+
continents = Continent.objects.all()
964+
serializer = ContinentSerializer(continents, many=True)
965+
966+
with self.assertNumQueries(2):
967+
serializer.data

0 commit comments

Comments
 (0)