diff --git a/src/dal/views.py b/src/dal/views.py
index 727d24b4e..69fe0c33b 100644
--- a/src/dal/views.py
+++ b/src/dal/views.py
@@ -145,14 +145,18 @@ def get_search_results(self, queryset, search_term):
                 ]
                 queryset = queryset.filter(reduce(operator.or_, or_queries))
 
-            if any(
-                lookup_needs_distinct(queryset.model._meta, search_spec)
-                for search_spec in orm_lookups
-            ):
+            if self.lookup_needs_distinct(queryset, orm_lookups):
                 queryset = queryset.distinct()
 
         return queryset
 
+    def lookup_needs_distinct(self, queryset, orm_lookups):
+        """Return True if an orm_lookup requires calling qs.distinct()."""
+        return any(
+            lookup_needs_distinct(queryset.model._meta, search_spec)
+            for search_spec in orm_lookups
+        )
+
     def create_object(self, text):
         """Create an object given a text."""
         return self.get_queryset().get_or_create(
diff --git a/src/dal_queryset_sequence/views.py b/src/dal_queryset_sequence/views.py
index 13278f661..117503583 100644
--- a/src/dal_queryset_sequence/views.py
+++ b/src/dal_queryset_sequence/views.py
@@ -64,3 +64,9 @@ def get_model_name(self, model):
             except IndexError:
                 pass
         return model._meta.verbose_name
+
+    def lookup_needs_distinct(self, queryset, orm_lookups):
+        """Return True if a orm_lookups requires calling qs.distinct()."""
+        for qs in queryset._querysets:
+            if super().lookup_needs_distinct(qs, orm_lookups):
+                return True
diff --git a/test_project/select2_generic_foreign_key/test_views.py b/test_project/select2_generic_foreign_key/test_views.py
new file mode 100644
index 000000000..4ff8e959f
--- /dev/null
+++ b/test_project/select2_generic_foreign_key/test_views.py
@@ -0,0 +1,12 @@
+import pytest
+
+from django import test
+from django.urls import reverse
+
+from .forms import TForm
+
+
+@pytest.mark.django_db
+def test_search(client):
+    url = reverse(TForm.declared_fields['test2'].as_url(TForm).name)
+    response = client.get(url + '?q=test+1').json()