File tree Expand file tree Collapse file tree 4 files changed +41
-5
lines changed
Expand file tree Collapse file tree 4 files changed +41
-5
lines changed Original file line number Diff line number Diff line change @@ -253,16 +253,23 @@ def _get_serializer_field_relations(
253253 if current_relation :
254254 source = self ._get_joined_prefetch (current_relation , source )
255255
256- append_to .append (source )
257-
258256 add_to_select , add_to_prefetch = self .get_prefetch (
259257 field ,
260258 current_relation = source ,
261259 should_prefetch = future_should_prefetch ,
262260 )
263261
264- select_items .extend (add_to_select )
265- prefetch_items .extend (add_to_prefetch )
262+ meta = (
263+ getattr (field .child , "Meta" , None )
264+ if isinstance (field , serializers .ListSerializer )
265+ else getattr (field , "Meta" , None )
266+ )
267+ if meta :
268+ model = getattr (meta , "model" , None )
269+ if meta and model :
270+ append_to .append (source )
271+ select_items .extend (add_to_select )
272+ prefetch_items .extend (add_to_prefetch )
266273
267274 return select_items , prefetch_items
268275
Original file line number Diff line number Diff line change 44# drf-serializer-prefetch
55from setuptools import find_packages , setup
66
7- VERSION = "1.1.4 "
7+ VERSION = "1.1.5 "
88DESCRIPTION = "An automatic prefetcher for django-rest-framework."
99this_directory = Path (__file__ ).parent
1010LONG_DESCRIPTION = (this_directory / "README.md" ).read_text ()
Original file line number Diff line number Diff line change @@ -15,6 +15,8 @@ class Pizza(models.Model):
1515 label = models .CharField (max_length = 50 )
1616 provenance = models .ForeignKey (Country , on_delete = models .CASCADE )
1717
18+ extra_data = models .JSONField (null = True )
19+
1820
1921class Topping (models .Model ):
2022 pizza = models .ForeignKey (Pizza , on_delete = models .CASCADE , related_name = "toppings" )
Original file line number Diff line number Diff line change @@ -896,3 +896,30 @@ class Meta:
896896 },
897897 ],
898898 )
899+
900+ def test_non_model_serializer_not_prefetched (self ):
901+ class ExtraDataSerializer (serializers .Serializer ):
902+ label = serializers .CharField ()
903+
904+ class PizzaSerializer (PrefetchingSerializerMixin , serializers .ModelSerializer ):
905+ extra_data = ExtraDataSerializer ()
906+
907+ class Meta :
908+ model = Pizza
909+ fields = ("label" , "extra_data" )
910+
911+ Pizza .objects .create (
912+ label = "Margherita" ,
913+ extra_data = {"label" : "Margherita" },
914+ provenance = self .canada ,
915+ )
916+ pizzas = Pizza .objects .filter (label = "Margherita" )
917+ serializer = PizzaSerializer (pizzas , many = True )
918+
919+ with self .assertNumQueries (1 ):
920+ data = serializer .data
921+
922+ self .assertEqual (
923+ data ,
924+ [{"label" : "Margherita" , "extra_data" : {"label" : "Margherita" }}],
925+ )
You can’t perform that action at this time.
0 commit comments