def polymorphic_prefetch_related(self, *lookups): clone = self._clone() for lookup in lookups: if not isinstance(lookup, Prefetch): lookup = Prefetch(lookup) if lookup.queryset is None: rel = self.model._meta.get_field(lookup.prefetch_through) lookup.queryset = rel.related_model.objects.all() lookup.queryset = lookup.queryset.polymorphic() clone = clone.prefetch_related(lookup) return clone
def get_queryset(self): category_prefetch = Prefetch( 'categories', queryset=SpeakerCategory.objects.all().select_related( 'tournament')) if not self.request.user or not self.request.user.is_staff: category_prefetch.queryset = category_prefetch.queryset.filter( public=True) return super().get_queryset().prefetch_related(category_prefetch)
def get_queryset(self): category_prefetch = Prefetch( 'categories', queryset=SpeakerCategory.objects.all().select_related( 'tournament')) if not self.request.user or not self.request.user.is_staff: category_prefetch.queryset = category_prefetch.queryset.filter( public=True) return super().get_queryset().select_related( 'tournament').prefetch_related( Prefetch( 'speaker_set', queryset=Speaker.objects.all().prefetch_related( category_prefetch).select_related('team__tournament'), ), 'institution_conflicts', 'break_categories', 'break_categories__tournament', )