def _qs_filter(self, queryset, prefetch=True):
        """
        Filter queryset to exclude drafts, blocked users etc. and select and
        prefetch related objects, if required.

        :param queryset: Queryset object of entries.
        :param prefetch: Do you need to prefetch data? If you are going to use
        them, definitely use default value, else set to False to escape
        unnecessary database overhead (e.g. You only need qs to access count).
        :return: Queryset
        """

        novice_view_modes = ["novices", "entry_permalink", "acquaintances"]  # modes in which novice entries are visible

        if self.view_mode == "recent" and self.request.user.is_novice:
            # 'followups' doesn't include novice entries for authors, but does for novices.
            novice_view_modes.append("recent")
        elif self.view_mode == "search" and self.request.GET.get("keywords", "").strip().startswith("@"):
            novice_view_modes.append("search")

        qs = queryset.exclude(is_draft=True)

        if self.view_mode not in novice_view_modes:
            qs = qs.exclude(author__is_novice=True)

        if self.request.user.is_authenticated:
            qs = qs.exclude(author__in=self.request.user.blocked.all())

        if prefetch:
            return entry_prefetch(qs, self.request.user, comments=self.topic.is_ama)

        return qs
Example #2
0
    def get_queryset(self):
        handler = UserStatsQueryHandler(self.profile,
                                        requester=self.request.user,
                                        order=True)
        qs = getattr(handler, self.tab)()
        tab_obj_type = self.tabs.get(self.tab)["type"]

        if tab_obj_type == "entry":
            return entry_prefetch(qs, self.request.user)

        if tab_obj_type in ("author", "topic", "category"):
            return qs

        raise Http404
    def get_queryset(self):
        """Filter queryset by self.view_mode"""
        queryset = None

        if self.entry is not None:
            return entry_prefetch(
                Entry.objects_all.filter(pk=self.entry.pk), self.request.user, comments=self.topic.is_ama
            )

        if self.topic.exists:
            queryset = getattr(self, self.view_mode)()

        if queryset is not None:
            if self.view_mode == "following":
                return queryset  # _qs_filter is applied in the method already

            return self._qs_filter(queryset)

        return self.model.objects.none()
 def get_queryset(self):
     queryset = Entry.objects.filter(pk__in=self.get_pk_set())
     return entry_prefetch(queryset, self.request.user)