diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py index 084a2f67cb..2b7a690a83 100644 --- a/django/contrib/admin/views/main.py +++ b/django/contrib/admin/views/main.py @@ -750,8 +750,7 @@ class ChangeList(object): for bit in self.query.split(): or_queries = [models.Q(**{construct_search(field_name): bit}) for field_name in self.lookup_opts.admin.search_fields] other_qs = QuerySet(self.model) - if qs._select_related: - other_qs = other_qs.select_related() + other_qs.dup_select_related(qs) other_qs = other_qs.filter(reduce(operator.or_, or_queries)) qs = qs & other_qs diff --git a/django/db/models/query.py b/django/db/models/query.py index d9c2f8144b..9f9d5a6ce3 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -402,6 +402,13 @@ class _QuerySet(object): obj.query.max_depth = depth return obj + def dup_select_related(self, other): + """ + Copies the related selection status from the queryset 'other' to the + current queryset. + """ + self.query.select_related = other.query.select_related + def order_by(self, *field_names): """Returns a new QuerySet instance with the ordering changed.""" assert self.query.can_filter(), \