From d569c1dcfeb26ca9ee391e5dfeadedf2b5ed4253 Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Tue, 4 Jul 2023 17:45:54 -0400 Subject: 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. --- django/contrib/admin/views/main.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) (limited to 'django') 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: -- cgit v1.3