summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/lookups.py9
-rw-r--r--tests/aggregation_regress/tests.py8
2 files changed, 17 insertions, 0 deletions
diff --git a/django/db/models/lookups.py b/django/db/models/lookups.py
index 5089737034..8d3648b393 100644
--- a/django/db/models/lookups.py
+++ b/django/db/models/lookups.py
@@ -406,6 +406,15 @@ class In(FieldGetDbPrepValueIterableMixin, BuiltinLookup):
self.rhs.add_fields(['pk'])
return super().process_rhs(compiler, connection)
+ def get_group_by_cols(self, alias=None):
+ cols = self.lhs.get_group_by_cols()
+ if hasattr(self.rhs, 'get_group_by_cols'):
+ if not getattr(self.rhs, 'has_select_fields', True):
+ self.rhs.clear_select_clause()
+ self.rhs.add_fields(['pk'])
+ cols.extend(self.rhs.get_group_by_cols())
+ return cols
+
def get_rhs_op(self, connection, rhs):
return 'IN %s' % rhs
diff --git a/tests/aggregation_regress/tests.py b/tests/aggregation_regress/tests.py
index 877e7b49a7..5d841b166a 100644
--- a/tests/aggregation_regress/tests.py
+++ b/tests/aggregation_regress/tests.py
@@ -1525,6 +1525,14 @@ class AggregationTests(TestCase):
allow_distinct = True
DistinctAggregate('foo', distinct=True)
+ @skipUnlessDBFeature('supports_subqueries_in_group_by')
+ def test_having_subquery_select(self):
+ authors = Author.objects.filter(pk=self.a1.pk)
+ books = Book.objects.annotate(Count('authors')).filter(
+ Q(authors__in=authors) | Q(authors__count__gt=2)
+ )
+ self.assertEqual(set(books), {self.b1, self.b4})
+
class JoinPromotionTests(TestCase):
def test_ticket_21150(self):