コード例 #1
0
    def get_queryset(self):
        self.q = self.request.GET.get('term', None)

        template_cats = VideoCat.objects.all()
        tags = Tag.objects.all()

        if not self.q:

            qs = QuerySetSequence().none()

        else:
            template_cats = template_cats.filter(name__icontains=self.q)
            tags = tags.filter(name__icontains=self.q)

            #
            # Get Haystack search results and convert to pks for local
            #
            content = SearchQuerySet().filter(content=AutoQuery(self.q))
            content_pks = [i.pk for i in content]
            content = Vid.objects.filter(pk__in=content_pks)

            # Aggregate querysets
            qs = QuerySetSequence(content, template_cats, tags)

        if self.q:
            # This would apply the filter on all the querysets
            qs = qs.filter(name__icontains=self.q)

        # This will limit each queryset so that they show an equal number
        # of results.
        qs = self.mixup_querysets(qs)

        return qs
コード例 #2
0
    def get_context(self, request):
        # Обновляем контекст для внесения только опубликованных постов в обратном хронологическом порядке
        context = super().get_context(request)

        featured_posts = QuerySetSequence(BlogPage.objects.all()[:6],
                                          ReviewPage.objects.all()[:6])
        latest_posts = QuerySetSequence(BlogPage.objects.all()[:6],
                                        ReviewPage.objects.all()[:6])

        context['featured_posts'] = featured_posts
        context['latest_posts'] = latest_posts

        return context
コード例 #3
0
 def test_slicing(self):
     for i in range(10):
         Author.objects.create(name="{:02d}".format(2*i))
         Publisher.objects.create(name="(:02d)".format(2*i + 1))
     unsliced = list(QuerySetSequence(
         Author.objects.all(),
         Publisher.objects.all()
     ).order_by("name"))
     sliced = list(QuerySetSequence(
         Author.objects.all(),
         Publisher.objects.all()
     ).order_by("name")[:5])
     assert unsliced[:5] == sliced
コード例 #4
0
 def test_slicing_single_queryset_source(self):
     for i in range(5):
         Author.objects.create(name="{:02d}".format(i))
         Publisher.objects.create(name="(:02d)".format(i + 5))
     unsliced = list(QuerySetSequence(
         Author.objects.all(),
         Publisher.objects.all()
     ).order_by("name"))
     sliced = list(QuerySetSequence(
         Author.objects.all(),
         Publisher.objects.all()
     ).order_by("name")[:5])
     assert unsliced[:5] == sliced
コード例 #5
0
    def category(self, request, cat_slug):
        context = super(BlogIndexPage, self).get_context(request)
        result = None

        try:
            cat = home_models.Node.objects.get(name__iexact=cat_slug)
            blogs = cat.blogpage_set.all()
            reviews = cat.reviewpage_set.all()
            result = QuerySetSequence(blogs, reviews)
        except:
            return HttpResponseRedirect('/')

        # page = request.GET.get('page')
        # paginator = Paginator(blogs, 6)

        # try:
        #     paginated_blogs = paginator.page(page)
        # except PageNotAnInteger:
        #     paginated_blogs = paginator.page(1)
        # except EmptyPage:
        #     paginated_blogs = paginator.page(paginator.num_pages)

        context['blogs'] = result
        context['filter_term'] = cat_slug.capitalize()

        return render(request, 'blog/category_page.html', context)
コード例 #6
0
    def get_queryset(self):

        articles = Article.objects.all()
        custompage = CustomPage.objects.all()
        events = Event.objects.all()
        persons = Person.objects.all()
        medias = Media.objects.all()

        if self.q:
            articles = articles.filter(title__icontains=self.q)\
                .order_by("-publish_date")
            custompage = custompage.filter(title__icontains=self.q)\
                .order_by("-publish_date")
            events = events.filter(title__icontains=self.q).order_by("-start")
            persons = persons.filter(title__icontains=self.q)
            medias = medias.filter(
                title__icontains=self.q).order_by("-publish_date")

        qs = autocomplete.QuerySetSequence(articles, custompage, events,
                                           persons, medias)
        # Unlimited queryset
        # https://django-autocomplete-light.readthedocs.io/en/master/_modules/dal_queryset_sequence/views.html
        # qs = self.mixup_querysets(qs)
        querysets = list(qs.get_querysets())
        qs = QuerySetSequence(*[q for q in querysets])

        return qs
コード例 #7
0
    def all_categories(self, request):
        context = super(BlogIndexPage, self).get_context(request)
        context['categories'] = home_models.Node.objects.get(
            pk=1).get_children()

        search_query = request.GET.get('q', None)
        if search_query:
            context['blogs'] = BlogPage.objects.search(
                search_query, fields=['title', 'body'])
            context['search_term'] = search_query
            context['search_type'] = 'search'
            return render(request, 'blog/category_page.html', context)

        allblogs = QuerySetSequence(self.blogs, self.reviews)

        page = request.GET.get('page')
        paginator = Paginator(allblogs, 6)

        try:
            blogs = paginator.page(page)
        except PageNotAnInteger:
            blogs = paginator.page(1)
        except EmptyPage:
            blogs = paginator.page(paginator.num_pages)

        context['blogs'] = blogs

        return render(request, 'blog/category_page.html', context)
コード例 #8
0
ファイル: views.py プロジェクト: hiringnext1/hiringnext
 def mixup_querysets(self, qs):
     """Return a queryset with different model types."""
     if len(list(qs.query._querysets)):
         limit = int(self.paginate_by / len(qs.query._querysets))
         qs.query._querysets[0][:2]
         qs = QuerySetSequence(*[q[:limit] for q in qs.query._querysets])
     return qs
コード例 #9
0
    def test_duplicates(self):
        """Ensure that pagination works over an 'extreme' number of duplicates."""
        PAGES = 100 # This must be unique from other fixture data.

        # Create a bunch of books that are the same.
        for i in range(15):
            Book.objects.create(title=str(i),
                                author=self.author,
                                publisher=self.publisher,
                                pages=PAGES,
                                release=date(2018, 10, 5))

        # And use only those duplicate books.
        self.queryset = QuerySetSequence(Book.objects.filter(pages=PAGES))

        titles = [item.title for item in self.queryset]

        # Look at both the pages (which should all be 1) and the IDs.
        next_url = '/'
        for i in range(3):
            request = Request(factory.get(next_url))
            queryset = self.pagination.paginate_queryset(self.queryset, request)
            titles, pages = zip(*[(item.title, item.pages) for item in queryset])

            self.assertEqual(titles, tuple(map(lambda d: str(d + (i * 5)), [0, 1, 2, 3, 4])))
            self.assertEqual(pages, (PAGES, ) * 5)

            next_url = self.pagination.get_next_link()

        self.assertIsNone(next_url)
コード例 #10
0
    def __init__(self,
                 *args,
                 model_choice=None,
                 widget=None,
                 view=None,
                 field_id=None,
                 **kwargs):
        """Initialize GenericForeignKeyModelField."""
        self.field_id = field_id if field_id else id(self)
        if model_choice:
            self.model_choice = model_choice
            models_queryset = [
                model[0].objects.all() for model in model_choice
            ]
            kwargs['queryset'] = QuerySetSequence(*models_queryset)

        # check if they are classes
        if isinstance(widget, type) and isinstance(view, type):
            self.widget_obj = widget
            self.view_obj = view
        else:
            raise AttributeError(
                "Class object are required (not instantiated)")

        super().__init__(*args, **kwargs)
コード例 #11
0
    def dashboard(self, request):
        from itertools import chain
        from operator import attrgetter
        from queryset_sequence import QuerySetSequence
        from django.db.models import F, Value
        news_query_set = News.objects.filter(
            date_published__isnull=False, status='LIVE').annotate(
                item_type=Value("NEWS", output_field=CharField()))
        event_query_set = Event.objects.filter(
            date_published__isnull=False,
            status='LIVE').exclude(type__code__in=[
                LKUPEventType.EVENT_TYPE_MEETING,
                LKUPEventType.EVENT_TYPE_ONE_ON_ONE
            ]).annotate(image=F('banner')).annotate(
                item_type=Value("EVENT", output_field=CharField()))
        combine_queryset = QuerySetSequence(news_query_set, event_query_set)
        # query_set = sorted(
        #     chain(news_query_set, event_query_set),
        #     key=attrgetter('date_published'), reverse=True)
        query_set = combine_queryset.order_by('-date_published').filter(
            date_published__lte=datetime.datetime.today())
        # query_set = sorted(
        #     combine_queryset,
        #     key=attrgetter('date_published'), reverse=True)
        # for a in query_set:
        #     print(str(a.date_published) + a.item_type)

        page = self.paginate_queryset(query_set)
        if page is not None:
            data = StorySerializer(page, many=True).data
            return self.get_paginated_response(data)
        return construct_response(CODE_SUCCESS,
                                  StorySerializer(list, many=True).data)
コード例 #12
0
    def get_queryset(self):

        articles = Article.objects.all()
        custompage = CustomPage.objects.all()
        events = Event.objects.all()
        briefs = Brief.objects.all()
        medias = Media.objects.all()
        persons = Person.objects.all()
        projects = Project.objects.all()
        playlists = Playlist.objects.all()

        if self.q:
            articles = articles.filter(title__icontains=self.q)\
                .order_by("-publish_date")
            custompage = custompage.filter(title__icontains=self.q)\
                .order_by("-publish_date")
            events = events.filter(title__icontains=self.q).order_by("-start")
            briefs = briefs.filter(title__icontains=self.q)
            medias = medias.filter(title__icontains=self.q)
            persons = persons.filter(title__icontains=self.q)
            projects = projects.filter(title__icontains=self.q)
            playlists = playlists.filter(title__icontains=self.q)

        qs = autocomplete.QuerySetSequence(articles, custompage, briefs,
                                           events, medias, persons, projects,
                                           playlists)

        querysets = list(qs.get_querysets())
        qs = QuerySetSequence(*[q for q in querysets])

        return qs
コード例 #13
0
ファイル: autocomplete.py プロジェクト: abegibson/amphora
    def get_queryset(self):
        querysets = [
            Resource.objects.all(),
            ConceptEntity.objects.all(),
        ]
        qs = QuerySetSequence(*querysets)

        if self.q:
            qs = qs.filter(name__icontains=self.q)
            # In addition to filtering existing Entities, we should also
            #  consider Concepts provided by registered authority services.
            if len(self.q) > 3:  # To avoid frivolous authority calls, we only
                            #  consider Concepts once the user has entered
                            #  four characters.
                extra_choices = self._suggest_concept(self.q)

        if not self.request.user.is_authenticated():
            qs = qs.filter(private=False)

        field_id = self.request.GET.get('in_range_of', None)
        if field_id:
            qs = qs.filter(entity_type__in_range_of__in=[field_id])

        qs = self.mixup_querysets(qs)
        return qs
コード例 #14
0
ファイル: views.py プロジェクト: suman98/TechDiscussion
def message(request):
    if "username" not in request.session:
        return HttpResponse("<h1>Hey you must login first</h1>")
    if request.method == "POST" and "message" in request.POST:
        sender = request.session['username']
        receiver = request.POST.get('receiver')
        message = request.POST.get('message')
        new = Message(sender_id=sender, receiver_id=receiver, message=message)
        new.save()
    if request.method == "GET" and "show_msg" in request.GET:
        notify = Logic().Message(request.session['username'],
                                 request.GET.get('show_msg'))
        return render(request, 'popup.html', {'Message': notify})
    if request.method == "GET" and "receiver" in request.GET:
        receiver = request.GET.get('receiver')
    message = QuerySetSequence(
        Message.objects.filter(sender_id=request.session['username'],
                               receiver_id=receiver),
        Message.objects.filter(
            sender_id=receiver,
            receiver_id=request.session['username'])).order_by('-uploaded_at')
    if message.exists() == False:
        message = "Empty"
    return render(request, 'messaging.html', {
        'Message': message,
        'receiver': User.objects.get(user_id=receiver)
    })
コード例 #15
0
    def test_query_keyword(self):
        """Test constructing a QuerySetSequence with the query keyword."""
        clone = self.all._clone()
        qss = QuerySetSequence(query=clone.query)

        data = [it.title for it in qss]
        self.assertEqual(data, self.EXPECTED)
コード例 #16
0
ファイル: views.py プロジェクト: allymanga/JSPAssetManagement
 def mixup_querysets(self, qs):
     """Return a queryset with different model types."""
     querysets = list(qs.get_querysets())
     queryset_count = len(querysets)
     if queryset_count:
         limit = int(self.paginate_by / queryset_count)
         qs = QuerySetSequence(*[q[:limit] for q in querysets])
     return qs
コード例 #17
0
 def test_same_model(self):
     """
     If a QuerySetSequence is made of the same model multiple times, the #
     attribute must be different on each.
     """
     queryset = QuerySetSequence(Book.objects.all(), Book.objects.all())
     data = list(map(attrgetter('#'), queryset))
     self.assertEqual([0, 0, 1, 1], data)
コード例 #18
0
    def test_open_slice(self):
        """Test slicing without an end."""
        articles = Article.objects.all()
        qs = articles[1:]
        qss = QuerySetSequence(articles)[1:]

        self.assertEqual(len(qs), len(qss))
        self.assertEqual(list(qs), list(qss))
コード例 #19
0
    def test_without_model_keyword_args(self):
        """Test constructing a QuerySetSequence without the model keyword."""
        qss = QuerySetSequence(
            Book.objects.filter(title="Fiction"),
            Book.objects.filter(title="Biography"),
        )

        data = [it.title for it in qss]
        self.assertEqual(data, self.EXPECTED_WITH_BOOK_MODEL)
コード例 #20
0
    def test_validate(self):
        fixture = self.model.objects.create(name=self.id())

        form = self.form(http.QueryDict('name=%s&test=%s' % (
            self.id(), self.get_value(fixture))))

        form.fields['test'].queryset = QuerySetSequence(
            self.model.objects.exclude(pk=fixture.pk))

        self.assertFalse(form.is_valid())
コード例 #21
0
    def __init__(self, *args, model_choice=None, field_id=None, **kwargs):
        self.field_id = field_id if field_id else id(self)
        if model_choice:
            self.model_choice = model_choice
            models_queryset = [
                model[0].objects.all() for model in model_choice
            ]
            kwargs['queryset'] = QuerySetSequence(*models_queryset)

        super().__init__(*args, **kwargs)
コード例 #22
0
    def _get_queryset_for_pks(self, pks):
        querysets = []
        for content_type_id, object_ids in pks.items():
            queryset = self.get_queryset_for_content_type(content_type_id)

            if queryset is None:
                self.raise_invalid_choice(params=dict(
                    value='%s-%s' % (content_type_id, object_ids[0])))

            querysets.append(queryset.filter(pk__in=object_ids))
        return QuerySetSequence(*querysets)
コード例 #23
0
    def test_closed_slice_single_qs(self):
        """Test slicing if the start and end are within the same QuerySet."""
        Article.objects.create(title='Another Article', author=self.bob,
                               publisher=self.mad_magazine)

        articles = Article.objects.all()
        qs = articles[1:3]
        qss = QuerySetSequence(articles)[1:3]

        # The length should be the same.
        self.assertEqual(len(qs), len(qss))
コード例 #24
0
    def mixup_querysets(self, qs):
        """Return a queryset with different model types."""
        try:
            querysets = qs._querysets
        except AttributeError:
            querysets = qs.query._querysets

        if len(list(querysets)):
            limit = int(self.paginate_by / len(querysets))
            querysets[0][:2]
            qs = QuerySetSequence(*[q[:limit] for q in querysets])
        return qs
コード例 #25
0
    def test_validate(self):
        # Create an option to select
        fixture = TestModel.objects.create(name=self.id())

        # Instanciate the form with the fixture selected
        form = TestForm(http.QueryDict('name=%s&test=%s' % (
            self.id(), self.get_value(fixture))))

        # Remove the option from field queryset choices
        form.fields['test'].queryset = QuerySetSequence(
            TestModel.objects.exclude(pk=fixture.pk))

        # Form should not validate
        self.assertFalse(form.is_valid())
コード例 #26
0
    def setUp(self):
        self.author = Author.objects.create(name="Jane Doe")
        self.publisher = Publisher.objects.create(
            name="Pablo's Publishing", address="123 Publishing Street")

        for d in range(1, 15):
            book = Book.objects.create(title='Book %s' % (d % 2),
                                       author=self.author,
                                       publisher=self.publisher,
                                       pages=d)

        self.pagination = _TestPagination()
        self.queryset = QuerySetSequence(Book.objects.filter(pages__lte=7),
                                         Book.objects.filter(pages__gt=7))
コード例 #27
0
    def filtering_ajax(self, request, *args, **kwargs):
        if request.is_ajax():
            form_data = json.loads(request.GET.get('form_data'))
            # print(form_data)

            # Deserialization JSON object
            form_data = {
                key: value
                for (key, value) in [o.values() for o in form_data]
            }
            # print(form_data)

            # Categories(All, Fitness....)
            if 'categories-input' in form_data and form_data[
                    'categories-input'] != 'all':
                cat = home_models.Node.objects.get(
                    pk=form_data['categories-input'])
                blogs = cat.blogpage_set.all()
                reviews = cat.reviewpage_set.all()
            else:
                blogs = self.blogs
                reviews = self.reviews

            # Post Type(All, Product, Review)
            if 'post-input' in form_data and form_data['post-input'] != 'all':
                if form_data['post-input'] == 'product':
                    result = blogs
                elif form_data['post-input'] == 'review':
                    result = reviews
            else:
                result = QuerySetSequence(blogs, reviews)

            #  checking
            # if 'license' in parsed_JSON:
            #     blogs = result_queryset.filter(cls._FILTER_LIST['license'])

            # Sorting. Sorting gotta occurs after all filters in the order
            # blogs = result_queryset.order_by(cls._FILTER_LIST['sorting'][parsed_JSON['sorting']])

            # context = super(BlogIndexPage, self).get_context(request)

            data = {}
            data['html_from_view'] = render_to_string(
                template_name="blog/includes/cards.html",
                context={
                    'blogs': result,
                })
            return JsonResponse(data=data)
        return JsonResponse({'result': None})
コード例 #28
0
 def find(ans, likes):
     notify = []
     like_q = []
     ans_q = []
     objects = QuerySetSequence(ans, likes).order_by('-uploaded_at')
     for obj in objects:
         if hasattr(obj, 'type1'):  #type1 xa vani tyo like ma parxa
             if obj.question_id not in like_q:
                 like_q.append(obj.question_id)
                 notify.append(["like", obj])
         else:
             if obj.question_id not in ans_q:
                 ans_q.append(obj.question_id)
                 notify.append(["ans", obj])
     return notify
コード例 #29
0
    def test_order_by_relation_with_different_ordering(self):
        """
        Apply order_by() with a field that returns a model with different
        ordering on sub-QuerySets.
        """
        # Both of these have publishers with the same fields, but different
        # ordering.
        all = QuerySetSequence(Article.objects.all(), BlogPost.objects.all())

        # Order by publisher and ensure it takes.
        with self.assertNumQueries(0):
            qss = all.order_by('publisher')
        self.assertEqual(qss.query.order_by, ['publisher'])

        self.assertRaises(FieldError, list, qss)
コード例 #30
0
    def get_queryset(self):

        playlists = Playlist.objects.all()

        if self.q:
            playlists = playlists.filter(title__icontains=self.q)

        qs = autocomplete.QuerySetSequence(playlists, )

        if self.q:
            qs = qs.filter(title__icontains=self.q)

        querysets = list(qs.get_querysets())
        qs = QuerySetSequence(*[q for q in querysets])

        return qs