Skip to content

Commit

Permalink
Add to django RelatedManagerListSerializerField the kwarg use_prefetch.
Browse files Browse the repository at this point in the history
  • Loading branch information
onyg committed Jan 25, 2016
1 parent f86e4da commit 41d3544
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion aserializer/django/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,22 @@

class RelatedManagerListSerializerField(ListSerializerField):

def __init__(self, serializer, sort_by=None, use_prefetch=False, *args, **kwargs):
super(RelatedManagerListSerializerField, self).__init__(serializer=serializer, sort_by=sort_by, *args, **kwargs)
self.use_prefetch = use_prefetch

def pre_value(self, fields=None, exclude=None, **extras):
super(RelatedManagerListSerializerField, self).pre_value(fields=fields, exclude=exclude, **extras)
self.use_prefetch = extras.get('use_prefetch', self.use_prefetch)

def set_value(self, value):
if value is None:
return
elif isinstance(value, Iterable):
values = value
elif isinstance(value, (QuerySet, Manager)):
# if using prefetch_related, we can't use only as it will re-fetch the data
if not self.extras.get('use_prefetch') and (self.only_fields or self.exclude):
if not self.use_prefetch and (self.only_fields or self.exclude):
local_fields = get_local_fields(value.model)
related_fields = get_related_fields(value.model)
only_fields = [f.name for f in local_fields]
Expand Down

0 comments on commit 41d3544

Please sign in to comment.