예제 #1
0
 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
예제 #2
0
파일: views.py 프로젝트: tienne-B/tabbycat
    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)
예제 #3
0
파일: views.py 프로젝트: tienne-B/tabbycat
    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',
            )