Skip to content

Commit 74cfac2

Browse files
author
macias
committed
Revert "adjust get_filtered_queryset do dalessi requirements"
This reverts commit 501d5ae.
1 parent 501d5ae commit 74cfac2

File tree

1 file changed

+18
-40
lines changed

1 file changed

+18
-40
lines changed

binder/views.py

Lines changed: 18 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1668,64 +1668,42 @@ def _get_filtered_queryset_base(self, request, pk=None, include_annotations=None
16681668

16691669
return queryset, annotations
16701670

1671-
def get_filtered_queryset(self, request, pk=None, include_annotations=None):
1671+
def get_filtered_queryset(self, request, *args, **kwargs):
16721672
"""
16731673
Returns a scoped queryset with filtering and sorting applied as
16741674
specified by the request.
16751675
"""
1676-
queryset = self.get_queryset(request)
1677-
if pk:
1678-
queryset = queryset.filter(pk=int(pk))
1679-
1680-
# No parameter repetition. Should be extended to .params too after filters have been refactored.
1681-
for k, v in request.GET.lists():
1682-
if not k.startswith('.') and len(v) > 1:
1683-
raise BinderRequestError('Query parameter `{}` may not be repeated.'.format(k))
1684-
1685-
#### soft-deletes
1686-
queryset = self.filter_deleted(queryset, pk, request.GET.get('deleted'), request)
1687-
1688-
#### annotations
1689-
if include_annotations is None:
1690-
include_annotations = self._parse_include_annotations(request)
1691-
1692-
queryset = annotate(queryset, request, include_annotations.get(''))
1693-
1694-
#### filters
1695-
filters = {k.lstrip('.'): v for k, v in request.GET.lists() if k.startswith('.')}
1696-
for field, values in filters.items():
1697-
for v in values:
1698-
q, distinct = self._parse_filter(field, v, request, include_annotations)
1699-
queryset = queryset.filter(q)
1700-
if distinct:
1701-
queryset = queryset.distinct()
1702-
1703-
#### search
1704-
if 'search' in request.GET:
1705-
queryset = self.search(queryset, request.GET['search'], request)
1706-
1676+
queryset, annotations = self._get_filtered_queryset_base(request, *args, **kwargs)
1677+
queryset = queryset.annotate(**annotations)
17071678
queryset = self.order_by(queryset, request)
1708-
17091679
return queryset
17101680

1711-
17121681
def get(self, request, pk=None, withs=None, include_annotations=None):
17131682
include_meta = request.GET.get('include_meta', 'total_records').split(',')
17141683
if include_annotations is None:
17151684
include_annotations = self._parse_include_annotations(request)
17161685

1717-
queryset = self.get_filtered_queryset(request, pk, include_annotations)
1686+
queryset, annotations = self._get_filtered_queryset_base(request, pk, include_annotations)
17181687

17191688
meta = self._generate_meta(include_meta, queryset, request, pk)
17201689

1690+
queryset = self._order_by_base(queryset, request, annotations)
17211691
queryset = self._paginate(queryset, request)
17221692

1723-
#### with
1724-
# parse wheres from request
1725-
data = self._get_objs(queryset, request=request, annotations=include_annotations.get(''))
1693+
# We fetch the data with only the currently applied annotations
1694+
data = self._get_objs(
1695+
queryset,
1696+
request=request,
1697+
annotations=include_annotations.get(''),
1698+
to_annotate=annotations,
1699+
)
17261700

1727-
pks = [obj['id'] for obj in data]
1701+
# Now we add all remaining annotations to this data
1702+
data_by_pk = {obj['id']: obj for obj in data}
1703+
pks = set(data_by_pk)
17281704

1705+
#### with
1706+
# parse wheres from request
17291707
extras, extras_mapping, extras_reverse_mapping, field_results = self._get_withs(pks, withs, request=request, include_annotations=include_annotations)
17301708

17311709
for obj in data:
@@ -1741,7 +1719,7 @@ def get(self, request, pk=None, withs=None, include_annotations=None):
17411719
meta['comment'] = self.comment
17421720

17431721
debug = {'request_id': request.request_id}
1744-
if django.conf.settings.DEBUG and 'debug' in request.GET:
1722+
if settings.DEBUG and 'debug' in request.GET:
17451723
debug['queries'] = ['{}s: {}'.format(q['time'], q['sql'].replace('"', '')) for q in django.db.connection.queries]
17461724
debug['query_count'] = len(django.db.connection.queries)
17471725

0 commit comments

Comments
 (0)