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
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)