def get_queryset(self): request = self.request # Allow pages to be filtered to a specific type try: models = page_models_from_string( request.GET.get('type', 'wagtailcore.Page')) except (LookupError, ValueError): raise BadRequestError("type doesn't exist") if not models: models = [Page] if len(models) == 1: queryset = models[0].objects.all() else: queryset = Page.objects.all() # Filter pages by specified models queryset = filter_page_type(queryset, models) # Hide root page # TODO: Add "include_root" flag queryset = queryset.exclude(depth=1).specific() return queryset
def get_queryset(self): request = self.request # Allow pages to be filtered to a specific type try: models = page_models_from_string(request.GET.get('type', 'wagtailcore.Page')) except (LookupError, ValueError): raise BadRequestError("type doesn't exist") if not models: models = [Page] if len(models) == 1: queryset = models[0].objects.all() else: queryset = Page.objects.all() # Filter pages by specified models queryset = filter_page_type(queryset, models) # Hide root page # TODO: Add "include_root" flag queryset = queryset.exclude(depth=1) return queryset
def get_queryset(self): request = self.request # Allow pages to be filtered to a specific type. try: models = page_models_from_string( request.GET.get('type', 'wagtailcore.Page')) except (LookupError, ValueError): raise BadRequestError("type doesn't exist") if not models: models = [Page] if len(models) == 1: queryset = models[0].objects.all() else: queryset = Page.objects.all() # Filter pages by specified models. queryset = self.filter_page_type(queryset, models) # Get live pages that are not in a private section. queryset = queryset.public().live() # Filter by site. queryset = queryset.descendant_of(request.site.root_page, inclusive=True) return queryset
def get_queryset(self): request = self.request # Allow pages to be filtered to a specific type try: models = page_models_from_string( request.GET.get("type", "meetup_scraper.MeetupPage")) except (LookupError, ValueError): raise BadRequestError("type doesn't exist") if not models: models = [MeetupPage] if len(models) == 1: queryset = models[0].objects.all() else: queryset = Page.objects.all() # Filter pages by specified models queryset = filter_page_type(queryset, models) # Get live pages that are not in a private section queryset = queryset.public().live() # Filter by site if request.site: queryset = queryset.descendant_of(request.site.root_page, inclusive=True) else: # No sites configured queryset = queryset.none() return queryset
def get_queryset(self): self._activate_language(self.request) request = self.request try: models = page_models_from_string( request.GET.get('type', 'wagtailcore.Page')) except (LookupError, ValueError): raise BadRequestError("type doesn't exist") _qs = Page.objects.all().public() if not (request.user and request.user.is_superuser): _qs = _qs.live() if self.request.site: _qs = _qs.descendant_of(self.request.site.root_page, inclusive=True) else: # No sites configured _qs = _qs.none() if not models: return _qs elif len(models) == 1: return models[0].objects.filter( id__in=_qs.values_list('id', flat=True)) else: # len(models) > 1 return filter_page_type(_qs, models)
def list(self, request): more_like_this_id = self.request.query_params.get('id') limit = self.request.query_params.get('limit', 20) content_type = self.request.query_params.get('type', 'wagtailcore.Page') exclude_ids = self.request.query_params.get('exclude') if more_like_this_id is None: raise BadRequestError('No ID is provided') queryset = self.get_queryset() try: more_like_this_page = queryset.filter(pk=more_like_this_id).get() except queryset.model.DoesNotExist: raise BadRequestError('The ID does not match a live page') try: models = page_models_from_string(content_type) except (LookupError, ValueError): raise BadRequestError("type doesn't exist") try: limit = int(limit) except ValueError: raise BadRequestError('Limit is not an integer') if not self.min_limit <= limit <= self.max_limit: raise BadRequestError('Limit is less than {} or more than {}'.format(self.min_limit, self.max_limit)) exclude_ids = exclude_ids.split(',') if exclude_ids else [] if len(exclude_ids) > 0: for i, val in enumerate(exclude_ids): try: exclude_ids[i] = int(val) except ValueError: raise BadRequestError('exclude is not a list of integers') backend = get_backend() related_pages = backend.get_similar_items( more_like_this_page, limit=limit, content_types=models, exclude_pks=exclude_ids, ) serializer = self.serializer_class(related_pages, many=True) return Response(serializer.data)
def get_queryset(self): """Allows the user to 1+ Page-derived models to query""" try: models = page_models_from_string( self.request.GET.get('type', 'wagtailcore.Page')) except (LookupError, ValueError) as exception: raise BadRequestError("type doesn't exist") from exception if not models: models = [Page] if len(models) == 1: queryset = models[0].objects.all() else: queryset = Page.objects.select_related('site').all() # Filter pages by specified models queryset = self._filter_page_type(queryset, models) queryset = queryset.public().live().specific() return queryset