diff options
| author | Simon Charette <charette.s@gmail.com> | 2023-07-04 17:45:54 -0400 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-07-07 07:08:28 +0200 |
| commit | d569c1dcfeb26ca9ee391e5dfeadedf2b5ed4253 (patch) | |
| tree | 5576142a5ad89097dec169002c24d6ffc75c94c3 /django | |
| parent | 28e2077148f7602d29165e90965974698819cbba (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.py | 23 |
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: |
