diff options
| author | Jacob Walls <jacobtylerwalls@gmail.com> | 2021-10-05 21:38:15 -0400 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-12-15 08:14:19 +0100 |
| commit | 76ccce64cc3d66cfec075651c3d2239fda747dc2 (patch) | |
| tree | 6d0b0e141e8cc5affdb568aef63e3aaa7e2e9779 /django | |
| parent | e1d673c373a7d032060872b690a92fc95496612e (diff) | |
Fixed #16063 -- Adjusted admin changelist searches spanning multi-valued relationships.
This reduces the likelihood of admin searches issuing queries with
excessive joins.
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/admin/options.py | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 66f3396a6b..c5968a79ed 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -1031,6 +1031,7 @@ class ModelAdmin(BaseModelAdmin): if search_fields and search_term: orm_lookups = [construct_search(str(search_field)) for search_field in search_fields] + term_queries = [] for bit in smart_split(search_term): if bit.startswith(('"', "'")) and bit[0] == bit[-1]: bit = unescape_string_literal(bit) @@ -1038,7 +1039,8 @@ class ModelAdmin(BaseModelAdmin): *((orm_lookup, bit) for orm_lookup in orm_lookups), _connector=models.Q.OR, ) - queryset = queryset.filter(or_queries) + term_queries.append(or_queries) + queryset = queryset.filter(models.Q(*term_queries)) may_have_duplicates |= any( lookup_spawns_duplicates(self.opts, search_spec) for search_spec in orm_lookups |
