summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2023-07-04 17:45:54 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-07-07 07:08:28 +0200
commitd569c1dcfeb26ca9ee391e5dfeadedf2b5ed4253 (patch)
tree5576142a5ad89097dec169002c24d6ffc75c94c3 /django
parent28e2077148f7602d29165e90965974698819cbba (diff)
Fixed #34639 -- Reverted "Fixed #32682 -- Made admin changelist use Exists() instead of distinct() for preventing duplicates."
This reverts commit 187118203197801c6cb72dc8b06b714b23b6dd3d which moved to using Exists() instead due to an overly strict distinct().delete() check added in #32433.
Diffstat (limited to 'django')
-rw-r--r--django/contrib/admin/views/main.py23
1 files changed, 11 insertions, 12 deletions
diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
index c659474e7d..44001f00f9 100644
--- a/django/contrib/admin/views/main.py
+++ b/django/contrib/admin/views/main.py
@@ -29,7 +29,7 @@ from django.core.exceptions import (
SuspiciousOperation,
)
from django.core.paginator import InvalidPage
-from django.db.models import Exists, F, Field, ManyToOneRel, OrderBy, OuterRef
+from django.db.models import F, Field, ManyToOneRel, OrderBy
from django.db.models.expressions import Combinable
from django.urls import reverse
from django.utils.deprecation import RemovedInDjango60Warning
@@ -566,6 +566,13 @@ class ChangeList:
# ValueError, ValidationError, or ?.
raise IncorrectLookupParameters(e)
+ if not qs.query.select_related:
+ qs = self.apply_select_related(qs)
+
+ # Set ordering.
+ ordering = self.get_ordering(request, qs)
+ qs = qs.order_by(*ordering)
+
# Apply search results
qs, search_may_have_duplicates = self.model_admin.get_search_results(
request,
@@ -580,17 +587,9 @@ class ChangeList:
)
# Remove duplicates from results, if necessary
if filters_may_have_duplicates | search_may_have_duplicates:
- qs = qs.filter(pk=OuterRef("pk"))
- qs = self.root_queryset.filter(Exists(qs))
-
- # Set ordering.
- ordering = self.get_ordering(request, qs)
- qs = qs.order_by(*ordering)
-
- if not qs.query.select_related:
- qs = self.apply_select_related(qs)
-
- return qs
+ return qs.distinct()
+ else:
+ return qs
def apply_select_related(self, qs):
if self.list_select_related is True: