def get_context(self, data, accepted_media_type, renderer_context): filters_on = False filter_fields = None context = super(BrowsableAPIRenderer, self).get_context(data, accepted_media_type, renderer_context) request = renderer_context.get('request') r = request.GET try: model = context.get('view').get_queryset().model query = QueryParser(model, r.get('query')) if hasattr(model, 'filter_fields'): filter_fields = query.populate_filter_fields() for ff in filter_fields: if hasattr(ff, 'value'): filters_on = True break context.update({ 'filter_fields': filter_fields, 'sql': query.query_text, 'object_type': model.model_name, 'object_name_plural': model.model_name_plural, 'has_filters': True, 'filters_on': filters_on }) except Exception: context.update({'filter_fields': ['No model detected']}) return context
def filter_queryset(self, request, queryset, view): r = request.GET or request.POST if r.get('query'): query = QueryParser(queryset.model, r.get('query')) return query.extend_query(queryset) else: return queryset
def metadata(self, request): # extend the existing metadata method in the parent class by adding a # list of available filters from localground.apps.lib.helpers import QueryParser from django.utils.datastructures import SortedDict ret = super(QueryableListCreateAPIView, self).metadata(request) ret = SortedDict(ret) try: query = QueryParser(self.model, request.GET.get('query')) ret['filters'] = query.to_dict_list() except Exception: pass return ret
def _apply_sql_filter(self, queryset, request, context): if context.get('has_filters') is not None: return queryset if request is None or request.GET.get('query') is None: return queryset from localground.apps.lib.helpers import QueryParser query = QueryParser(self.model, request.GET.get('query')) if query.error: context.update({'error_message': query.error_message}) return queryset # Add some information to the request context context.update({ 'filter_fields': query.populate_filter_fields(), 'sql': query.query_text, 'has_filters': True }) return query.extend_query(queryset)