Example #1
0
    def get_queryset_with_paginator(self,
                                    model_or_qset,
                                    base_url=None,
                                    search_query=None,
                                    obj_per_page=OBJECTS_PER_PAGE,
                                    manager='objects',
                                    result_manager='objects',
                                    distinct=False,
                                    annotate=None,
                                    order_non_fields=None):

        if hasattr(model_or_qset, '_meta'):
            model = model_or_qset
        else:
            model = model_or_qset.model

        base_url = base_url or self.request.path

        queryset = self.get_queryset_ids(model_or_qset,
                                         search_query=search_query,
                                         manager=manager,
                                         distinct=distinct,
                                         annotate=annotate,
                                         order_non_fields=order_non_fields)

        paginator = Paginator(queryset, obj_per_page)
        try:

            page = paginator.page(self.page)
        except InvalidPage:
            raise Http404(_('Page %s does not exist.') % self.page)
            # Django that can't throw exceptions other than 404.

        result_qset = getattr(
            model, result_manager).filter(id__in=tuple(page.object_list))

        if annotate:
            result_qset = result_qset.annotate(**annotate)

        if self.extra:
            result_qset = result_qset.extra(**self.extra)

        if self.order:
            result_qset = result_qset.order_by(*self.order)  # 1082

        if order_non_fields:
            result_qset = result_qset.order_by(order_non_fields)

        # XXX
        page.object_list = result_qset

        paginator.current_page = page
        paginator.current_object_list = result_qset

        paginator.base_url = base_url

        return paginator
Example #2
0
    def get_queryset_with_paginator(
            self, model_or_qset, base_url=None, search_query=None,
            obj_per_page=OBJECTS_PER_PAGE, manager='objects',
            result_manager='objects', distinct=False,
            annotate=None, order_non_fields=None):

        if hasattr(model_or_qset, '_meta'):
            model = model_or_qset
        else:
            model = model_or_qset.model

        base_url = base_url or self.request.path

        queryset = self.get_queryset_ids(
            model_or_qset, search_query=search_query, manager=manager,
            distinct=distinct, annotate=annotate, order_non_fields=order_non_fields)

        paginator = Paginator(queryset, obj_per_page)
        try:

            page = paginator.page(self.page)
        except InvalidPage:
            raise Http404(_('Page %s does not exist.') % self.page)
            # Django that can't throw exceptions other than 404.

        result_qset = getattr(
            model, result_manager).filter(id__in=tuple(page.object_list))

        if annotate:
            result_qset = result_qset.annotate(**annotate)

        if self.extra:
            result_qset = result_qset.extra(**self.extra)

        if self.order:
            result_qset = result_qset.order_by(*self.order)  # 1082

        if order_non_fields:
            result_qset = result_qset.order_by(order_non_fields)

        # XXX
        page.object_list = result_qset

        paginator.current_page = page
        paginator.current_object_list = result_qset

        paginator.base_url = base_url

        return paginator
Example #3
0
    def get_queryset_with_paginator(self,
                                    models,
                                    base_url=None,
                                    search_query=None,
                                    obj_per_page=OBJECTS_PER_PAGE,
                                    managers='objects',
                                    distinct=False):
        base_url = base_url or self.request.path

        if isinstance(managers, basestring):
            managers = [managers] * len(models)

        model_qsets = []

        for model, manager in zip(models, managers):
            model_manager = getattr(model, manager)
            model_qset = model_manager.all()
            model_qsets.append(model_qset)

        if type(search_query) is dict:
            querysets = [
                model_qset.filter(**search_query) for model_qset in model_qsets
            ]

        elif type(search_query) is tuple:
            querysets = [
                model_qset.filter(*search_query[0], **search_query[1])
                for model_qset in model_qsets
            ]

        elif callable(search_query):
            querysets = [
                search_query(model_qset) for model_qset in model_qsets
            ]

        elif search_query is not None:
            try:
                querysets = [
                    model_qset.filter(search_query)
                    for model_qset in model_qsets
                ]
            except:
                querysets = [
                    search_query.values_list('id', flat=True)
                    for model_qset in model_qsets
                ]
        else:
            querysets = model_qsets

        if self.order:
            querysets = [
                queryset.order_by(*self.order) for queryset in querysets
            ]

        if distinct:
            querysets = [queryset.distinct() for queryset in querysets]

        paginator = Paginator(MultiQueryset(querysets), obj_per_page)
        try:

            page = paginator.page(self.page)
        except InvalidPage:
            raise Http404(_('Page %s does not exist.') % self.page)
            # Django that can't throw exceptions other than 404.

        # result_qset = getattr(
        #    model, result_manager).filter(
        #        id__in=tuple(page.object_list))

        # if self.order:
        # result_qset = result_qset.order_by(*self.order)  # 1082

        paginator.current_page = page
        paginator.current_object_list = page.object_list
        paginator.base_url = base_url

        return paginator
Example #4
0
    def get_queryset_with_paginator(
            self, models, base_url=None, search_query=None,
            obj_per_page=OBJECTS_PER_PAGE, managers='objects', distinct=False):
        base_url = base_url or self.request.path

        if isinstance(managers, basestring):
            managers = [managers] * len(models)

        model_qsets = []

        for model, manager in zip(models, managers):
            model_manager = getattr(model, manager)
            model_qset = model_manager.all()
            model_qsets.append(model_qset)

        if type(search_query) is dict:
            querysets = [
                model_qset.filter(**search_query) for model_qset in
                model_qsets]

        elif type(search_query) is tuple:
            querysets = [
                model_qset.filter(*search_query[0], **search_query[1])
                for model_qset in model_qsets]

        elif callable(search_query):
            querysets = [
                search_query(model_qset) for model_qset in model_qsets]

        elif search_query is not None:
            try:
                querysets = [
                    model_qset.filter(search_query) for model_qset in
                    model_qsets]
            except:
                querysets = [
                    search_query.values_list('id', flat=True)
                    for model_qset in model_qsets]
        else:
            querysets = model_qsets

        if self.order:
            querysets = [
                queryset.order_by(*self.order) for queryset in querysets]

        if distinct:
            querysets = [queryset.distinct() for queryset in querysets]

        paginator = Paginator(
            MultiQueryset(querysets), obj_per_page)
        try:

            page = paginator.page(self.page)
        except InvalidPage:
            raise Http404(_('Page %s does not exist.') % self.page)
            # Django that can't throw exceptions other than 404.

        # result_qset = getattr(
        #    model, result_manager).filter(
        #        id__in=tuple(page.object_list))

        # if self.order:
        # result_qset = result_qset.order_by(*self.order)  # 1082

        paginator.current_page = page
        paginator.current_object_list = page.object_list
        paginator.base_url = base_url

        return paginator