class SeriesFilterSet(TimestampMixin, BaseFilterSet):
- submitter = PersonFilter(queryset=Person.objects.all())
- project = ProjectFilter(queryset=Project.objects.all())
+ submitter = PersonFilter(queryset=Person.objects.all(), distinct=False)
+ project = ProjectFilter(queryset=Project.objects.all(), distinct=False)
class Meta:
model = Series
class CoverLetterFilterSet(TimestampMixin, BaseFilterSet):
- project = ProjectFilter(queryset=Project.objects.all())
+ project = ProjectFilter(queryset=Project.objects.all(), distinct=False)
# NOTE(stephenfin): We disable the select-based HTML widgets for these
# filters as the resulting query is _huge_
series = BaseFilter(queryset=Project.objects.all(),
- widget=MultipleHiddenInput)
- submitter = PersonFilter(queryset=Person.objects.all())
+ widget=MultipleHiddenInput, distinct=False)
+ submitter = PersonFilter(queryset=Person.objects.all(), distinct=False)
class Meta:
model = CoverLetter
# NOTE(stephenfin): We disable the select-based HTML widgets for these
# filters as the resulting query is _huge_
series = BaseFilter(queryset=Series.objects.all(),
- widget=MultipleHiddenInput)
- submitter = PersonFilter(queryset=Person.objects.all())
- delegate = UserFilter(queryset=User.objects.all())
- state = StateFilter(queryset=State.objects.all())
+ widget=MultipleHiddenInput, distinct=False)
+ submitter = PersonFilter(queryset=Person.objects.all(), distinct=False)
+ delegate = UserFilter(queryset=User.objects.all(), distinct=False)
+ state = StateFilter(queryset=State.objects.all(), distinct=False)
hash = CharFilter(lookup_expr='iexact')
class Meta:
class CheckFilterSet(TimestampMixin, BaseFilterSet):
- user = UserFilter(queryset=User.objects.all())
+ user = UserFilter(queryset=User.objects.all(), distinct=False)
class Meta:
model = Check
# filters as the resulting query is _huge_
# TODO(stephenfin): We should really use an AJAX widget of some form here
project = ProjectFilter(queryset=Project.objects.all(),
- widget=MultipleHiddenInput)
+ widget=MultipleHiddenInput,
+ distinct=False)
series = BaseFilter(queryset=Series.objects.all(),
- widget=MultipleHiddenInput)
+ widget=MultipleHiddenInput,
+ distinct=False)
patch = BaseFilter(queryset=Patch.objects.all(),
- widget=MultipleHiddenInput)
+ widget=MultipleHiddenInput,
+ distinct=False)
cover = BaseFilter(queryset=CoverLetter.objects.all(),
- widget=MultipleHiddenInput)
+ widget=MultipleHiddenInput,
+ distinct=False)
class Meta:
model = Event
class BundleFilterSet(BaseFilterSet):
- project = ProjectFilter(queryset=Project.objects.all())
- owner = UserFilter(queryset=User.objects.all())
+ project = ProjectFilter(queryset=Project.objects.all(), distinct=False)
+ owner = UserFilter(queryset=User.objects.all(), distinct=False)
class Meta:
model = Bundle
self.assertNotIn('web_url', resp.data[0]['patches'][0])
def test_list_bug_335(self):
- """Ensure we retrieve the embedded cover letter project once."""
- self._create_series()
-
- with self.assertNumQueries(4):
+ """Ensure we retrieve the embedded cover letter project in O(1)."""
+ project_obj = create_project(linkname='myproject')
+ person_obj = create_person(email='test@example.com')
+ for i in range(10):
+ series_obj = create_series(
+ project=project_obj, submitter=person_obj,
+ )
+ create_cover(series=series_obj)
+ create_patch(series=series_obj)
+
+ with self.assertNumQueries(6):
self.client.get(self.api_url())
@utils.store_samples('series-detail')